程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring單元測試

Spring單元測試

編輯:關於JAVA

Spring本身即是一個容器,所有的業務對象都是通過Spring容器來管理。Spring的注入特點讓我們輕松地解除了類與類之間的耦合性。但是,也給我們寫單元測試帶來了不少的麻煩,不過這種情況是在沒有考慮Spring提供的單元測試工具的情況下才會發生的。

1. 准備需要的jar包。

需要准備spring-mock.jar和naming-factory-dbcp.jar。第一個jar包中包括了Spring提供的單元測試工具類,第二個jar包是提供建立JDBC連接所需要的類。

2. 繼承AbstractTransactionalDataSourceSpringContextTests。

Spring提供了幾種基於Junit的單元測試工具類,這裡只介紹AbstractTransactionalDataSourceSpringContextTests,其他的請看官方文檔。這是一個具有事務的單元測試用例,你可以設置單元測試成功後數據庫事務是提交還是回滾,默認為回滾。

在繼承類中需要實現getConfigLocations方法,這個方法主要是為了取得Spring的application-context.xml文件。

protected String[] getConfigLocations() {
  String[] config = new String[] {
    "xxx-applicationContext.xml", "xxxx-applicationContext.xml"
  };
  return config;
}

注意,第一,如果使用上面的寫法,這些xml文件必須在classpath下;第二,TransactionManager只能定義一個。

3. 寫自己的測試用例。

示例代碼如下:

public abstract class MyDependencyInjectionSpringContextTests
  extends AbstractTransactionalDataSourceSpringContextTests {
  protected ServiceContext context;
  public MyDependencyInjectionSpringContextTests() {
  }
  /**
  * 重寫父類的onSetUpBeforeTransaction方法
  **/
  protected void onSetUpBeforeTransaction() throws Exception {
    super.onSetUpBeforeTransaction();
    //此處可以加入你想進行的統一操作
    ......
    //調用子類的處理
    beforeSetUp();
  }
  protected abstract void beforeSetUp() throws Exception;
  protected String[] getConfigLocations() {
    String[] config = new String[] {
      "service-applicationContext.xml", "dao-applicationContext.xml"
    };
    return config;
  }
}

====================================================================

public class MockServiceTest
  extends MyDependencyInjectionSpringContextTests {
  Mock mock;
  MockService service;
  protected void beforeSetUp() throws Exception {
    //初始化測試需要使用的數據
    mock=new Mock();
    mock.setName("test");
    mock.setType(1);
    service=(MockService) applicationContext.getBean("mockService");
  }
  public void testAddMock() {
      //測試方法
    service.addMock(mock);
    //這裡使用的是是hibernate,增加後主鍵被填充,所以只要判斷實體對象的id是否為null即可
    Assert.assertTrue("測試addMock方法失敗。" mock.getMockId!=null);
  }
  public static void main(String[] args) {
    junit.textui.TestRunner.run(MockServiceTest.class);
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved