• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 自動化單元測試實踐之路(2)

    發表于:2014-07-29來源:uml.org.cn作者:李樂點擊數: 標簽:
    或許,使用Ant來構建的團隊要問,為什么用Maven呢?簡單來說兩點 1、對第三方依賴庫進行統一的版本管理 說實話,ant處理依賴包之間的沖突問題,還是得靠

      或許,使用Ant來構建的團隊要問,為什么用Maven呢?簡單來說兩點

      1、對第三方依賴庫進行統一的版本管理

      說實話,ant處理依賴包之間的沖突問題,還是得靠人工解決,這個對于研發來說是消耗時間的,倒不如把節省的時間投入到業務中去。另外再也不用每個項目繁瑣復制spring.jar了,通過maven自動管理Java 庫和項目間的依賴,打包的時候會將所有jar復制到WEB- INF/lib/目錄下。

      2、統一項目的目錄結構。

      官方的約定:http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

      保證所有項目的目錄結構在任何服務器上都是一樣的,每個目錄起什么作用都很清楚明了。

      3、統一軟件構建階段

      http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

      Maven2把軟件開發的過程劃分成了幾個經典階段,比如你先要生成一些java代碼,再把這些代碼復制到特定位置,然后編譯代碼,復制需要放到classpath下的資源,再進行單元測試,單元測試都通過了才能進行打包,發布。

      測試框架:JUnit&Mockito

      1、JUnit

      JUnit是一個Java語言的單元測試框架。

      2013年見過一個舊項目,測試代碼還是以main作為入口,為什么要使用JUnit?

      JUnit 的優點是整個測試過程無人值守,開發無須在線參與和判斷最終結果是否正確,可以很容易地一次性運行多個測試,使得開發更加關注測試邏輯的編寫,而不是增加構建維護時間。

      團隊示例代碼:

    // 功能代碼
    package com.chinacache.portal.service;
    public class ReportService {
        public boolean validateParams() {
        }
        public String sendReport(Long id) {
        }
        public String sendReport(Long id, Date time) {
        }
    }
    // 單元測試代碼
    package com.chinacache.portal.service; // 必須與功能代碼使用相同 package
    public class ReportServiceUnitTest { // 測試類名以 UnitTest (單元測試) 或 InteTest (集成測試) 結尾
        // 測試方法名以 test 開頭,然后接對應的功能方法名稱
        @Test
        public void testValidateParams() {
        }
        // 如果功能方法存在重載,則再接上參數類型
        @Test
        public void testSendReportLong() {
        }
        // 如果一個功能方法對應多個測試方法,不同測試方法可使用簡潔而又有含義的單詞結尾,例如 success、fail 等    
        @Test
        public void testSendReportLongDateSuccess() {
        }
        // 這樣通過測試方法名即可知道:測的是哪個功能方法,哪種情況
        @Test
        public void testSendReportLongDateFail() {
        }
    }

      2、Mockito

      Mockito是一個針對Java的mocking框架。使用它可以寫出干凈漂亮的測試用例和簡單的API。它與EasyMock和jMock很相似,通過在執行后校驗什么已經被調用,消除了對期望行為(expectations)的需要,改變其他mocking庫以“記錄-回放”(這會導致代碼丑陋)的測試流程,使得自身的語法更像自然語言。

      Mockito示例:

    List mock = mock(List.class);
    when(mock.get(0)).thenReturn("one");
    when(mock.get(1)).thenReturn("two");
    someCodeThatInteractsWithMock();
    verify(mock).clear(); 

      EasyMock示例:

    List mock = createNiceMock(List.class);
    expect(mock.get(0)).andStubReturn("one");
    expect(mock.get(1)).andStubReturn("two");
    mock.clear();
    replay(mock);
    someCodeThatInteractsWithMock();
    verify(mock);

      官方對比文章:http://code.google.com/p/mockito/wiki/MockitoVSEasyMock

      反饋平臺:Jenkins&Sonar

      持續集成平臺:Jenkins

      Jenkins 的前身是 Hudson 是一個可擴展的持續集成引擎,主要用于:

      1.持續、自動地構建測試軟件項目

    原文轉自:http://www.uml.org.cn/Test/201407281.asp

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>