实践测试之Junit

Keep the bar green to keep the code clean.

JUnit 使单元测试变得简单艺术起来。

JUnit 是 Java 社区中知名度最高的单元测试工具。它诞生于 1997 年,由 Erich Gamma 和 Kent Beck 共同开发完成。其中 Erich Gamma 是经典著作《设计模式:可复用面向对象软件的基础》一书的作者之一,并在 Eclipse 中有很大的贡献; Kent Beck 则是一位极限编程( XP )方面的专家和先驱。麻雀虽小,五脏俱全。 JUnit 设计的非常小巧,但是功能却非常强大。

Martin Fowler 如此评价 JUnit :在软件开发领域,从来就没有如此少的代码起到了如此重要的作用。

1
2
3
4
5
6
	    <dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>

Junit使用规范

测试类一般命名以Tests结尾

测试方法一般以test开头

Junit常用注解

@Test

用于标注测试方法,必须是pubic void

expected

@Test(expected=ArithmeticException.class),抛出指定异常,否则认为测试不通过。 expected 属性的值是一个异常的类型 。

timeout

@Test(timeout=200),性能测试,执行时间超过200ms则测试失败该标记传入了一个时间(毫秒)给测试方法,如果测试方法在指定的时间之内没有运行完,则测试会失败,即使被测试方法测试正确也会失败。该标记主要用于测试被测试方法运行所需时间,即用于方法的简单性能测试。

@Before

每个测试方法执行前都会调用

@After

每个测试方法执行后都会调用

@BeforeClass

可以理解为测试类初始化方法,在测试方法执行前执行,初始化一些公共资源,仅执行一次,必须是static

@AfterClass

可以理解为测试类清理方法,在测试方法执行后执行,清理之前初始化的公共资源,仅执行一次,必须是static

@Ignore

有该标记的测试方法在测试中会被忽略。你可以为该标签传递一个 String 的参数,来表明为什么会忽略这个测试方法。比如: @lgnore(“this test method isn't working now ”) ,在执行的时候,仅会报告该方法没有实现,而不会运行该测试方法。

Assert

Suite

将测试类归组

1
2
3
4
@RunWith(Suite.class)
@SuiteClasses({TestSuite1.class, TestSuite2.class})
public class TestSuiteMain{
}

Runner

其实Junit也是标准的java程序,其main方法为:org.junit.runner.JUnitCore#main。Runner是用来运行测试和结果通知的,有各种不同的实现。

一般用@RunWith指定Runner。