Junit單元測試的簡單使用(主要是在spring框架下的項目)


首先是解釋什么是單元測試,單元測試是指對於一個大型項目里,對於單一模塊或者單一接口的測試。

然后解釋為什么要寫單元測試,首先對於一個大型的項目,如果你每次都要重啟一遍服務器調頁面或者接口的bug,那就會很影響效率。

那么一部分人就說了,我們都已經寫了那么多業務邏輯代碼了,為什么還要寫那么多沒有用的測試代碼呢,反正最后bug肯定會在最終被發現的,而且測試這種事情不應該是測試干的事情嗎?

還有一部分人說,我水平以及很高了,徒手千行代碼不出bug,不需要測試。

 

對於前面一種人,我舉個例子吧,如果你寫20個接口有5個是有bug的,還不算這5個會不會導致其他的接口出問題,那么你排除一個錯誤的時間應該在30分鍾左右,其中重啟服務器,調試,運行,尋找,都要時間,而這30分鍾,單元測試早就寫完了。而且白盒測試,都是程序自己的事情。

 

對於后一種人,我只能說,測試不是證明你是對的,而是證明你沒有錯。

 

說了那么多,那么到底怎么寫單元測試呢?

首先單元測試的包應該和src同級目錄,這樣在項目完成之后就可以直接刪除,不影響項目任何地方。

導入JUnit4的jar包。

新建一個工具類

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 單元測試工具類
 * @author XX
 *
 */
public class UnitTestBase {

    protected static ClassPathXmlApplicationContext context = null;
    
    /*對於單一配置文件的項目利用這個做單元測試,直接把路徑寫死了*/
    @BeforeClass
    public static void setUpBeforeClass() throws Exception{
        //獲取spring配置文件,生成上下文
        context = new ClassPathXmlApplicationContext("classpath*:beans.xml");
        context.start();
    }
    
    @AfterClass
    public static void setUpAfterClass()throws Exception{
        context.destroy();
    }
    
    /*下面的方法是用來適配有很多XML配置文件的項目,繼承之后傳入路徑即可生成對應的context*/
    
    /*private ClassPathXmlApplicationContext context;
    
    private String springXmlpath;
    
    public UnitTestBase() {}
    
    public UnitTestBase(String springXmlpath){
        this.springXmlpath = springXmlpath;
    }
    
    @Before
    public void berfore()
    {
        if(StringUtils.isEmpty(springXmlpath))
        {
            springXmlpath = "classpath*:spring-*.xml";
        }
        try {
            context = new ClassPathXmlApplicationContext(springXmlpath.split("[,\\s]+"));
            context.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    @After
    public void after()
    {
        context.destroy();
    }
    
    @SuppressWarnings("unchecked")
    protected <T extends Object> T getBean(String beanId) {
        return (T)context.getBean(beanId);
    }
    
    protected <T extends Object> T getBean(Class<T> clazz) {
        return context.getBean(clazz);
    }
    */
}

然后選擇對於你要新建單元測試的類按照下面的圖操作

QQ截圖20160327225334

QQ截圖20160327225359

QQ截圖20160327225520

QQ截圖20160327225534

這里只是演示一下,一般不直接對實現類做測試,直接對接口來測試,一般測試的是服務層的接口和持久層的接口

下面是測試的代碼

import org.junit.Test;

import com.xxx.newSystem.utils.UnitTestBase;//導入之前的工具類

public class IUserServiceTest extends UnitTestBase {

    IUserService userService = (IUserService) context.getBean("userService");
    
    @Test
    public void testLogin() {
        System.err.println(userService.login("xex", "123456"));
    }

}
//這是利用工具類中注釋掉的方法,用於有多個xml配置文件的時候做測試
public class TestOneInterface extends UnitTestBase{

    public TestOneInterface(){
        super("classpath*:beans.xml");
    }
    
    @Test
    public void test()
    {
        IUserService userService = super.getBean("userService");
    
        System.err.println(userService.login("xx", "123456"));
    }
    
    
}

 

對於Junit4使用,網上的方法也有很多,注解的配置也有很多,我只是找我需要的。還是各取所需比較好,之后的項目我都會寫單元測試的,做到真正的敏捷開發。


免責聲明!

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



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