SpringJUnit4ClassRunner 單元測試


1.pom.xml中加入

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.3.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.3.0.RELEASE</version>
</dependency>

2.單元測試基本類

package com.hshbic.cloudapp.junit;


import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;


@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/*.xml"})
@Rollback(value=false)
@Transactional(transactionManager="transactionManager")
public class BaseJunitTest {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("==============單元測試開始=============");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("==============單元測試結束=============");
    }

    

}

注解說明:
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則與此相反,表示你測試的內容中對數據庫的操作會真實的執行到數據庫中,不會回滾。

4) 單元測試中setUp方法和setUpBeforeClass方法的區別
setUp方法原來是每個方法測試之前都會調用一次,而setUpBeforeClass則在整個類測試過程中只調用一次。同理,tearDown和tearDownAfterClass的方法也是在於此。setUpBeforeClass和tearDownAfterClass這兩個方法是在junit4中新增的,junit3中沒有。

 5)創建基本單元測試類的目的是在父類加載了spring等配置文件,子類不需要再次加載,減少重復操作

3.單元測試子類

 

package com.hshbic.cloudapp.junit;

import static org.junit.Assert.*;


import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;

import com.hshbic.cloudapp.thirdserver.entity.CloudAppInfo;
import com.hshbic.cloudapp.thirdserver.mapper.CloudAppInfoMapper;
import com.hshbic.cloudapp.thirdserver.service.StatusDataPushService;
@Rollback(value=true)
public class StatusDataPushJunitTest extends BaseJunitTest{
    @Autowired
    public StatusDataPushService service ;
    @Autowired
    CloudAppInfoMapper appMapper;

    @Test
    public void test() throws Exception {
        System.out.println("開始進行 test方式的測試");
        String sign="";
        sign=service.getSign("SV-RAIN001815-0000","938233258bd0b8aad67d2a5cdfe5bac1","20180710172055");
        System.out.println("sign="+sign);
    }
    
    @Test
    public void insert() throws Exception {
        CloudAppInfo  app= new CloudAppInfo();
        app.setSystemId("SV-0000-0002");
        app.setSystemKey_develop("develop");
        app.setSystemKey_product("product");
        System.out.println("開始進行 newTest方式的測試");
        appMapper.insert(app);
        
    }

}

1)@Rollback(value=true)  子類中覆蓋父類的事務

2)繼承父類,不需要再寫@RunWith @ContextConfiguration@Rollback 和 transactionManager 等配置;也不需要再寫setUpBeforeClass等方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM