或許,使用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