非Spring的Tomcate Web應用整合Junit H2方案

       最近公司在抓代碼質量,要求新老項目整合Junit5,H2內存數據庫;新項目都是springboot的整合起來還是方便的,老項目整起來就頭疼了,老項目是Jodd框架弄的tomcate web項目,整合時花了些心思,特此記錄一下。

       我們都知道在測試之前需要初始化項目加載一些bean、數據源等資源,在springboot中一個註解就可以搞定——@SpringBootTest,只需要標註在測試類上就能注入spring管理的bean、service來使用了。然而老項目並不能這樣弄,後來通過不斷的找資料,發現Junit的測試類測試方法是可以主動觸發的,那這樣一來事情不就簡單多了嘛——在項目啓動完成之後主動觸發一下就ok了

Junit4主動觸發示例

Result result = JUnitCore.runClasses(OrderTest.class); //OrderTest是測試類

Junit5主動觸發示例:

LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
        .selectors(
                selectPackage("test/junit/suite")     //配置測試類所在目錄
                //selectClass(OrderTest.class),       //配置測試類
                //selectMethod(OrderTest.class,"testOrderPay")  //配置測試類測試方法
        )
        .filters(
                includeClassNamePatterns(".*Test")       //測試類名稱過濾器 //防盜標記 開源中國 爲何不可1995
        ).build();
Launcher launcher = LauncherFactory.create();
TestExecutionListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);

       配置H2數據庫,引入jar包 h2-2.1.214.jar,配置好數據源,使用原生jdbc初始化測試時需要的用到的建表語句及初始insert數據,數據庫初始化之後就可以開始測試了~

Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection(
//mem表示本地內存啓動h2,test是數據庫名稱,mode=mysql表示使用mysql模型
        "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;DB_CLOSE_ON_EXIT=TRUE;MODE=MYSQL", 
        "username",
        "passward");
for (int i = 0; i < schemas.size(); i++) {        //schemas是自定義的初始化建表語句List,inserts是初始化數據List
    Statement statement1 = conn.createStatement();
    statement1.execute(schemas.get(i));
}
for (int i = 0; i < inserts.size(); i++) {
    Statement statement1 = conn.createStatement();
    statement1.execute(inserts.get(i));
}//防盜標記 開源中國 爲何不可1995
conn.commit();
conn.close();

項目的數據源配置context.xml內容:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">   
 <Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource"
              maxTotal="100" maxIdle="30" maxWaitMillis="300000"
              username="xxx" password="xxx" driverClassName="org.h2.Driver"
              testWhileIdle="true" testOnBorrow="false" testOnReturn="false"
              validationQuery="select 1" validationQueryTimeout="1"
              timeBetweenEvictionRunsMillis="1802300" numTestsPerEvictionRun="100"
              url="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;DB_CLOSE_ON_EXIT=TRUE;MODE=MYSQL"/>
</Context>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章