天天看點

[Spring] Spring Test結合JUnit的單元測試

  1. 配置依賴

    檔案名:pom.xml(部分)

<!-- Spring 單元測試,需要JUint -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>4.1.1.RELEASE</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope><!-- 表示開發的時候引入,釋出的時候不會加載此包 -->
</dependency>
           
  1. 建立與src同級的測試源碼目錄 (test),編寫測試基類。

    BastTest類負責加載配置檔案,設定事務等。之後的所有測試類都可以直接繼承此類,就不需要每次都加載配置檔案。

    檔案名:BaseTest.java

package com.spz.spzblog.test;

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

/**
 * 測試基類
 */
@RunWith(SpringJUnit4ClassRunner.class) //使用Spring實作的測試執行類
@ContextConfiguration({"/spring/*.xml","/mybatis/*.xml"}) //加載配置檔案
//@Transactional
//@TransactionConfiguration(transactionManager = "transactionManager",defaultRollback = true)
public class BaseTest {

}
           

Transactional和TransactionConfiguration注解使得資料庫資料不會被測試程式污染。如果在測試基類中不配置這兩個注解,則需要給需要事務管理的測試方法添加事務注解。

檔案名:UserTest.java

package com.spz.spzblog.test.usertest;

import com.spz.spzblog.po.User;
import com.spz.spzblog.service.UserService;
import com.spz.spzblog.test.BaseTest;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

/**
 * 使用者相關測試
 */
public class UserTest extends BaseTest{

    @Autowired
    private UserService userServiceImpl;

    @Test
    @Transactional//啟用事務
    @Rollback(true)//方法結束自動復原,false為不復原
    public void aa()throws Exception{
        User user = new User();
        user.setUser_name("spz");
        user.setUser_pass("123");
        user = userServiceImpl.getUser(user);//此方法會通路資料庫
        if(user != null){//搜尋到該使用者
            System.out.println("I find it:" + user.getUser_name());
        }else{
            System.out.println("Error!");
        }
    }
}
           

環境:

SpringMVC、Spring、Mybatis、Maven、IntelliJ IDEA、JDK1.8

Spring項目使用JUint進行單元測試的缺點:

http://blog.csdn.net/shan9liang/article/details/40452469

參考