最近需要向组内其他成员普及一下关于Java测试用例的相关知识,特在此进行一下简单的学习和总结。

JUnit简介

JUnit是一个开源的Java单元测试框架,JUnit4对原有的JUnit框架进行了大幅度的改进,主要目标便是利用了Java中的Annotation,来代替以前必须要继承AbstractTestCase,以及要测试的方法名称必须test为前缀。

JUnit4中提供了三个Annotation,用来控制整个测试的生命周期:

  • @Before

相当与测试用例的初始化工作,在执行每个测试用例方法时,都会先执行该方法。

  • @After

测试用例的清理工作在该方法中编写,在每个方法执行完成后,都会进行清理。

@Before和@After可以保证一些测试用例中的资源在这些方法执行,不会受到@Test方法执行顺序的影响。

  • @Test

这个是实际的测试方法,会根据该方法中的断言语句(Assert)来进行测试用例的执行结果显示输出。

在@Test中,还有一些属性,这些属性都是非常有用的:

  • expect=xxxx.class(extends Throwable)

如果我们在测试方法中能够预料到一些错误的发生,就使用该方法进行处理。有时候,一个函数抛出异常也许是你希望得到的结果。

  • timeout=xxxx(一个毫秒值)

如果测试方法没有在指定的timeout时间内执行完成,该测试失败,这对于单元测试效率非常有帮助。

如果正在实践测试驱动开发,@Ignore可以暂时忽略掉一些已经定义但并没有实现的方法。

JUnit中有参数化测试的概念,只需要写一个测试函数,把若干种情况当成是参数传进去,进行测试即可。

类似下面的代码,就可以参数化的方式进行批量测试工作:

@RunWith(Parameterized.class)
public class BelongToRegionFunctionTestCase { private BelongToRegionFunction function; private boolean expected;
private int regionId;
private int parentRegionId; @Before
public void setUp() {
function = new BelongToRegionFunction();
} @After
public void tearDown() {
function = null;
} @Parameterized.Parameters
public static Collection prepareData() {
return Arrays.asList(
new Object[]{true, 15, 8},
new Object[]{true, 105, 8},
new Object[]{false, 2, 8}
);
} public BelongToRegionFunctionTestCase(boolean expected, int regionId, int parentRegionId) {
this.expected = expected;
this.regionId = regionId;
this.parentRegionId = parentRegionId;
} @Test
public void testOldRegion() throws IOException {
String filePath = this.getClass().getClassLoader().getResource("Region-000000000000000000000008-top100-new").getFile();
Assert.assertEquals(expected, function.evaluate(regionId,parentRegionId, filePath));
} @Test
public void testNewRegion() throws IOException {
String filePath = this.getClass().getClassLoader().getResource("Region-000000000000000000000008-top100-top100-top100-merge").getFile();
Assert.assertEquals(expected, function.evaluate(regionId,parentRegionId, filePath));
} }

Maven中运行JUnit

Maven本身不是一个单元测试框架,只是在构建执行到特定生命周期的时候,通过插件来执行JUnit的测试用例。这个插件就是maven-surefire-plugin,也成为Test Runner。

默认情况下,maven-surefire-plugin会执行测试源代码路径中的所有TestCase,路径为:src/test/java。maven中的test阶段是默认包含在一些阶段之前,也就是说package和install阶段都会默认先执行test,如果想要在package前跳过这个阶段,可以使用类似下面的命令:

maven package –DskipTests

如果不仅想要跳过测试运行,还需要跳过测试编译:

maven package –Dmaven.test.skip=true

如果在运行时某个测试用例执行失败,想要重新执行一次的时候,没有必要将所有的测试用例都跑一遍,仅需要执行部分的测试用例,maven-surefire-plugin提供了一个test参数可以让maven用户能够在命令行指定要运行的测试用例,可以使用通配符,以及加入多个Test类:

maven test –Dtest=Class*Test,Class2*Test

在idea中可以设置工程的Test Resources Folder,这样就可以在程序中用ClassLoader的getResource得到对应资源的路径和输入流,建议不要将测试使用的资源强行防至到对应的开发资源包中。

maven中可以定义测试资源的路径:

    <build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>

最新文章

  1. 软件工程(FZU2015)赛季得分榜,第八回合
  2. sharepoint 2013 持续爬网
  3. Mysql中的count()与sum()区别
  4. UVaLive 6858 Frame (水题)
  5. Castle Windsor 使MVC Controller能够使用依赖注入
  6. Array,ArrayList 和 List&lt;T&gt;的选择和性能比较.
  7. G - Arctic Network - poj2349
  8. 安卓Visibility属性
  9. PHP获取图片颜色值
  10. LeetCode -- Word Break 动态规划,详细理解
  11. Oracle和Mysql获取uuid的方法对比
  12. 简说Java线程的那几个启动方式
  13. myeclipse 无法启动Tomcat(程序未设置断点)This kind of launch is configured to open the Debug perspective ...
  14. python 获取中文拼音首字母;判断文件夹是否存在
  15. GUNS后台管理框架部署与发布
  16. python linux 源码安装Twisted
  17. Docker-compose networks 的例子
  18. 007、Docker 架构详解(2018-12-24 周一)
  19. MySQL数据库自动备份
  20. Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件

热门文章

  1. 消除浏览器对input输入框的自动填充
  2. 多线程相关(pthread 、NSThread 、GCD、NSOperation)
  3. SQL Server 2008 R2 使用 PIVOT 错误
  4. OpenGL实现3D自由变形
  5. SAPUI5实例一:来创建Web应用UI
  6. 在tableView中设置cell的图片和文字
  7. 同一台电脑的多ssh 配置
  8. [转]RC4加密已不再安全,破解效率极高
  9. css---选择器的特殊性
  10. ASP.NET Core 中的SEO优化(4):自定义视图路径及主题切换