天天看點

單元測試代碼自動化生成解決方案

寫在前面的話:

鄙人星雲,今年六月份,剛到北京入職了一家國企,由于剛進項目對現有的項目業務還不是很熟悉,但是上司已經下了指令,要我給現有的項目寫單元測試代碼,項目比較大,業務還不熟悉,如果全部手寫測試代碼,必然是個累死人不償命的事情。

那麼有沒有更好的解決方案呢?答案自然是肯定的。

解決方案:

通過查詢資料得知,在碼農界有這樣一個Eclipse插件——CodePro Analytix,通過這個插件可以自動批量生成單元測試代碼。

CodePro Analytix是一個基于Eclipse的快速開發環境,能夠自動的完成重複的任務使Java開發者快速的開發出高品質的軟體。能夠保證代碼品質,包括代碼評審、metric、設計模式、測試,等等

使用指南:

  1. CodePro Analytix 插件下載下傳
  2. 下載下傳後解壓到一個路徑下,路徑中最好不要有中文。

    解壓後像這樣:

單元測試代碼自動化生成解決方案
  1. 打開你的Eclipse IDE
    我用的IDE是STS——Spring 官方推出的Eclipse發行版。           
  2. Help------> Install new Software
    單元測試代碼自動化生成解決方案

5.Work With: --------> add... ------->Local...

浏覽找到剛才解壓的路徑

單元測試代碼自動化生成解決方案

6.選中這三個選項,然後一步一步安裝即可

單元測試代碼自動化生成解決方案

7.安裝完成後重新開機下你的Eclipse 即可。

8.修改配置

Windows------> Perference ——————Code Pro ------->JUnit ----->Generated Code

預設是這樣的:

單元測試代碼自動化生成解決方案
  1. 但是一般我們需要修改下才符合我們正常的使用
    單元測試代碼自動化生成解決方案

10.最後選中項目中的源碼檔案或者源碼檔案夾或項目名,右鍵------>Code Pro Tools----->Generate Test Case即可

單元測試代碼自動化生成解決方案

這樣,批量的單元測試代碼就生成了。

接下來講解一些注意事項:

  1. 關于JUnit報initializationError的解決方法
<!-- https://mvnrepository.com/artifact/org.hamcrest/hamcrest-core -->
<dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
            <version>1.3</version>
            <scope>test</scope>
</dependency>           

2.關于一些莫名奇妙無法處理的異常處理

比如莫名奇妙的空指針異常,可以在測試注解中添加這個值

@Test(expected = java.lang.NullPointerException.class)           

或者如果有其他的異常類似這個:

@Test(expected = org.apache.axiom.om.OMException.class)
    public void testSerialize_1()
        throws Exception {
        PostEvent fixture = new PostEvent();
        fixture.setEventName("");
        fixture.setEventData("");
        fixture.localEventNameTracker = true;
        fixture.localEventDataTracker = true;
        QName parentQName = new QName("");
        OMFactory factory = new OMLinkedListImplFactory();
        MTOMAwareXMLStreamWriter xmlWriter = new MTOMAwareOMBuilder();

        fixture.serialize(parentQName, factory, xmlWriter);

        // add additional test code here
        // An unexpected exception was thrown in user code while executing this test:
        //    org.apache.axiom.om.OMException: localname can not be null or empty
        //       at org.apache.axiom.om.impl.llom.OMElementImpl.<init>(OMElementImpl.java:135)
        //       at org.apache.axiom.om.impl.llom.OMElementImpl.<init>(OMElementImpl.java:118)
        //       at org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory.createOMElement(OMLinkedListImplFactory.java:75)
        //       at org.apache.axis2.databinding.utils.writer.MTOMAwareOMBuilder.writeStartElement(MTOMAwareOMBuilder.java:101)
        //       at org.apache.axis2.databinding.utils.writer.MTOMAwareOMBuilder.writeStartElement(MTOMAwareOMBuilder.java:92)
        //       at com.travelsky.dcsi.PostEvent.serialize(PostEvent.java:178)
        //       at com.travelsky.dcsi.PostEvent.serialize(PostEvent.java:151)
    }           

看到這樣的資訊就添加注解:

@Test(expected = org.apache.axis2.databinding.ADBException.class)           
  1. 關于斷言測試常用的幾種用法:
//如果result不為空傳回true測試通過
 assertNotNull(result);
//第一個參數是期待結果,第二個是實際的引用對象
assertEquals(true, result.hasNext());
//支援多種資料類型
assertEquals(2, result.next());
//期待結果是null 接受一個引用對象參數
assertNull(result)           

本篇完~

交流即分享,分享才能進步! 不對之處,還請各位前輩多多指教。 by 星雲 *

繼續閱讀