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