【测试之体系,人人皆有一砖一瓦】
【概述】
【选型】测试是非常重要的,构建一个好的测试对于系统的质量、重构非常重要。下面简单介绍下测试的一些框架,有的是带过,此篇主要是我这次迁移测试框架的一些总结。如果大家对其中的一些框架比较感兴趣,可以去研究下。 推荐:junit\testng\jmockit 。对于每个开发工程师肯定会大有益处的。其中会涉及到很到的java技术点。
【迁移】测试框架非常多,从最流行的junit到testng。业界的单元测试框架非常多,也比较复杂。为了减少大家选型带来的成本,阿里巴巴就开发了自己的单元测试框架,名为 jtester:http://code.google.com/p/java-tester/。jtester集成了非常多的框架,大家可以试用下。jtester其中内嵌了:testng、jmockit、script.bsh、fitnesse:http://fitnesse.org/FitNesse.UserGuide.OneMinuteDescription、jcommander: 是一个非常小的Java 类库,用来解析命令行参数、JTA:远程登陆、jtester也实现很多自己的一些框架,如:断言等。不过最难得是它把如此多好的框架无缝地集成在一起了。
最近几天在迁移单元测试,简单看了下以前的单元测试框架。<dependency><groupId>com.alibaba.external</groupId><artifactId>test.junit</artifactId><version>4.5</version><scope>test</scope></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>sourceforge.spring.modules.test</artifactId><version>2.5.6</version><scope>test</scope></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>test.testng.jdk15</artifactId><version>5.8</version></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>test.unitils</artifactId><version>2.4</version></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>test.dbunit</artifactId><version>2.4.3</version></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>test.hamcrest-all</artifactId><version>1.2</version></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>test.mockito-all</artifactId><version>1.8.0</version></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>test.jmock</artifactId><version>2.5.1</version></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>test.jmockit</artifactId><version>0.997</version></dependency><dependency><groupId>com.alibaba.external</groupId><artifactId>test.jmock-legacy</artifactId><version>2.5.1</version></dependency>其中有很多的框架在项目中根本就没有用到,所以就需要进行清理,所以我把在测试阶段的类加载信息打印出来(-XX:TraceClassLoading),再分析。不过这个比较繁琐后来还是直接只用 mvn dependency:analyze,来分析,{这些Unused declared dependencies 列表并不准确,如果project中还有大量反射等,移除包会出现想不到的意外,此点需要慎重。}![]()
![]()
分析后发现以下的框架在系统中没有应用:misc.ognl.jar(2.6.9)不知道干啥test.hamcrest-all.jar(1.2)http://code.google.com/p/hamcrest/Hamcrest it is not a testing library: it just happens that matchers are very useful for testing这个就不讲了。test.dbunit:jar(2.4.3)http://www.dbunit.org/数据库测试jmock jmock-legacy(2.5.1)mock框架http://www.jmock.org/mockito(1.8.0)是一个流行的Mocking框架把以上的测试框架全部去掉。
【兼容】后来进入,再加入了jtester测试框架
【思考】【工程中既有 testng又有junit的单元测试,怎么都能跑呢?】
本质testng是支持 junit单元测试的。在maven中单元测试是用surefire来跑的。这个就需要在surefire来设定了。如果不设置suiteXmlFiles属性,surefire会自动生成suiteXmlFile。他会自动生成testng文件,生成的规则是找test开头或者结尾的类。如果想指定,则需要junit与testng分别写suite。其中一个junit属性设置为true。
对于比较庞大的项目,那么测试的易用性非常重要。jtester是非常易用,并且他是开源的。不过对于文档和代码,好像作者没有及时更新啊。如果有朋友需要使用,可以联系我。嘿嘿。。。如果项目比较小,建议还是使用原生的junit与testng。