Spring mvc中集成Junit4测试

原址:点击打开链接

Junit 单元测试能够很轻易的对单个类进行测试,相对于在每个类中增加了一个main方法,它是一种无状态或者状态确定的单元测试,对于测试含有大量的复杂的类之间有依赖关系的测试,还是比较麻烦,而spring mvc提供了大量类之间的管理,使类之间的关系完全透明化,显然,如果junit4 能够支持spring mvc的单元测试,那么无疑给开发带来了效率的极大提高。目前junit4 能够不但能够支持spring ioc的单元测试还能够支持spring mvc的测试。


下面介绍如何通过junit4 对spring ioc进行单元测试
1. maven依赖包:

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>1.9.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.3.RELEASE</version> <scope>test</scope> </dependency>

2. 待测试的类:

package com.spring.test

public class Student { private Integer age; private String name; public Student(Integer age, String name) { super(); this.age = age; this.name = name; } @Override public String toString() { return "Student [age=" + age + ", name=" + name + "]"; } }

3. xml配置
1. 放在已存在的上下文xml中(~/src/main/resources/META-INF/spring/applicationContext.xml,
~/src/main/webapp/WEB-INF/spring/webmvc-config.xml)
2. 放在新建的xml,如(~/src/main/resources/META-INF/spring/BsConfig.xml)
内容为:

<bean id ="student" name="student" class="com.spring.test.Student"> <constructor-arg index="0" value="20"/> <constructor-arg index="1" value="fang"/> </bean>


4. 测试类的编写:

package com.spring.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.context.WebApplicationContext; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { // "classpath:/META-INF/spring/applicationContext.xml", "classpath:/META-INF/spring/BsConfig.xml" // "file:src/main/webapp/WEB-INF/spring/webmvc-config.xml"

}) @WebAppConfiguration public class StudentTest { @Autowired private Student student; @Autowired private ApplicationContext aC; @Test public void test() { System.out.println("display student: " + student.toString()); } @Test public void testApplication() { Student student = (Student) aC.getBean("student"); System.out .println("application display student: " + student.toString()); } }

此时,
4.1.  如果我们想直接得到实例化的 student对象,也就是无需从applicationContext中取出对象,那么可以在 @ContextConfiguration中定义的配置student的xml(可以是任意的xml,只需要定义student 类)。如 @ContextConfiguration(locations = {
"classpath:/META-INF/spring/BsConfig.xml"
})
然后执行
@Autowired

private Student student; 

@Test public void test() { System.out.println("display student: " + student.toString()); }

即可完成调用.

在spring中的mavn架构中,classpath,特指“~/src/main/resources/”目录,如果xml被定义在webapp目录之下,此时需要用file来引用,“~/src/main/webapp/WEB-INF/spring/webmvc-config.xml” 下的文件对应为: "file:src/main/webapp/WEB-INF/spring/webmvc-config.xml"

4.2 如果我们需要从applicationcontext中取出对应的bean的话,就需要额外的如下标签:
@WebAppConfiguration
 @Autowired
    private ApplicationContext aC;

测试类为:
  
  
  @Test
     public   void  testApplication ()   {
         Student  student  =   ( Student )  aC . getBean ( "student" );
         System . out
                 . println ( "application display student: "   +  student . toString ());
     }

注:
1. @ContextConfiguration中locations支持多个xml文件,但是在本文中,
    classpath:/META-INF/spring/applicationContext.xml",
        "file:src/main/webapp/WEB-INF/spring/webmvc-config.xml" 
不能够共存,否则会出现上下文初始化failed的情况。

2. 如果在“classpath:/META-INF/spring/applicationContext.xml"和"classpath:/META-INF/spring/BsConfig.xml"具有相同的student bean的定义,执行测试时也不会报错。

3.@RunWith(SpringJUnit4ClassRunner.class) ,主要指明使用SpringJUnit4ClassRunner.class来运行junit4测试。

下一步需要弄清楚:
@ContextConfiguration中locations的配置原理。


参考资料:
http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-configuration/
http://bosbluebluesky.blogspot.com/2013/10/junit-config-contextconfiguration.html
http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值