SpringMvcTest总结:
最近要做单元测试,所以选择的是SpringTest这个测试框架。
1.准备工作。(导入jar包)
因为使用Maven管理jar包,所以在要做单元测试的模块中的pom文件中加入如下代码:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
当然你可以将上述代码写在父模块中,那么就不必每个子模块中都重复写入上面的代码。
2.编写测试类。
@RunWith
这是一个类注解,表明该测试类的执行类是什么。如果没有,测试执行类会是默认的。
常见的测试执行类:
(1)SpringJUnit4ClassRunner.class:
(2)Parameterized.class:参数化运行器,配合@Parameters使用junit的参数化功能
(3)JUnit4.class:junit4的默认运行器
(4)Suite.class,用法如下:
@RunWith(Suite.class)
@SuiteClasses({ATest.class,BTest.class,CTest.class})
当执行有上面标注的测试类,那么ATest.class,BTest.class,CTest.class等多个测试类也会执行。
@ContextConfiguration 注解,这是一个类级别的注解。
该注解有以下两个常用的属性:
locations:可以通过该属性手工指定 Spring 配置文件所在的位置,可以指定一个或多个 Spring 配置文件。如下所示:
@ContextConfiguration(locations={“xx/yy/beans1.xml”,” xx/yy/beans2.xml”})。如果没有设置该属性,
那么,会在默认位置找配置文件,默认配置文件为“测试类名-context.xml”
inheritLocations:是否要继承父测试用例类中的 Spring 配置文件,默认为 true。
3.运行测试。
因为本人搭建的是Maven项目,所以我会把每个模块的测试类放在对应模块的src/test目录下,那么当我执行"mvn clean test"的时候,
maven会自动执行src/test目录下的所有测试类中的测试用例。十分方便,不用逐个点击测试用例进行点击。
存在问题:
还没有对rest服务的测试进行研究,还有dao层,service层。所以还需要继续学习。
|