1.pom.xml中加入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 1<dependency>
2 <groupId>junit</groupId>
3 <artifactId>junit</artifactId>
4 <version>4.12</version>
5 <scope>test</scope>
6</dependency>
7<dependency>
8 <groupId>org.springframework</groupId>
9 <artifactId>spring-test</artifactId>
10 <version>4.3.0.RELEASE</version>
11</dependency>
12<dependency>
13 <groupId>org.springframework</groupId>
14 <artifactId>spring-tx</artifactId>
15 <version>4.3.0.RELEASE</version>
16</dependency>
17
2.单元测试基本类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 1package com.hshbic.cloudapp.junit;
2
3
4import org.junit.AfterClass;
5import org.junit.BeforeClass;
6import org.junit.runner.RunWith;
7import org.springframework.test.annotation.Rollback;
8import org.springframework.test.context.ContextConfiguration;
9import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
10import org.springframework.transaction.annotation.Transactional;
11
12
13@RunWith(value = SpringJUnit4ClassRunner.class)
14@ContextConfiguration({"classpath:spring/*.xml"})
15@Rollback(value=false)
16@Transactional(transactionManager="transactionManager")
17public class BaseJunitTest {
18
19 @BeforeClass
20 public static void setUpBeforeClass() throws Exception {
21 System.out.println("==============单元测试开始=============");
22 }
23
24 @AfterClass
25 public static void tearDownAfterClass() throws Exception {
26 System.out.println("==============单元测试结束=============");
27 }
28
29
30
31}
32
注解说明:
1)@RunWith:用于指定junit运行环境,是junit提供给其他框架测试环境接口扩展,为了便于使用spring的依赖注入,spring提供了org.springframework.test.context.junit4.SpringJUnit4ClassRunner作为Junit测试环境
2) @ContextConfiguration({"classpath:applicationContext.xml","classpath:spring/buyer/applicationContext-service.xml"})
导入配置文件,这里我的applicationContext配置文件是根据模块来分类的。如果有多个模块就引入多个“applicationContext-service.xml”文件。如果所有的都是写在“applicationContext.xml”中则这样导入:
@ContextConfiguration(locations = "classpath:applicationContext.xml")
3) @Rollback 和 transactionManager @Rollback(新增注解)代替,其中只有一个属性就是boolean型的value,作用没变,值为true表示测试时如果涉及了数据库的操作,那么测试完成后,该操作会回滚,也就是不会改变数据库内容;值为false则与此相反,表示你测试的内容中对数据库的操作会真实的执行到数据库中,不会回滚。
- 单元测试中setUp方法和setUpBeforeClass方法的区别
setUp方法原来是每个方法测试之前都会调用一次,而setUpBeforeClass则在整个类测试过程中只调用一次。同理,tearDown和tearDownAfterClass的方法也是在于此。setUpBeforeClass和tearDownAfterClass这两个方法是在junit4中新增的,junit3中没有。
5)创建基本单元测试类的目的是在父类加载了spring等配置文件,子类不需要再次加载,减少重复操作
3.单元测试子类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 1package com.hshbic.cloudapp.junit;
2
3import static org.junit.Assert.*;
4
5
6import org.junit.Test;
7import org.springframework.beans.factory.annotation.Autowired;
8import org.springframework.test.annotation.Rollback;
9
10import com.hshbic.cloudapp.thirdserver.entity.CloudAppInfo;
11import com.hshbic.cloudapp.thirdserver.mapper.CloudAppInfoMapper;
12import com.hshbic.cloudapp.thirdserver.service.StatusDataPushService;
13@Rollback(value=true)
14public class StatusDataPushJunitTest extends BaseJunitTest{
15 @Autowired
16 public StatusDataPushService service ;
17 @Autowired
18 CloudAppInfoMapper appMapper;
19
20 @Test
21 public void test() throws Exception {
22 System.out.println("开始进行 test方式的测试");
23 String sign="";
24 sign=service.getSign("SV-RAIN001815-0000","938233258bd0b8aad67d2a5cdfe5bac1","20180710172055");
25 System.out.println("sign="+sign);
26 }
27
28 @Test
29 public void insert() throws Exception {
30 CloudAppInfo app= new CloudAppInfo();
31 app.setSystemId("SV-0000-0002");
32 app.setSystemKey_develop("develop");
33 app.setSystemKey_product("product");
34 System.out.println("开始进行 newTest方式的测试");
35 appMapper.insert(app);
36
37 }
38
39}
40
1)@Rollback(value=true) 子类中覆盖父类的事务
2)继承父类,不需要再写@RunWith @ContextConfiguration@Rollback 和 transactionManager 等配置;也不需要再写setUpBeforeClass等方法