go4it

just do it

JUnit4学习(二)异常和忽略测试

1.异常测试:

异常测试是 JUnit 4 中的最大改进。旧式的异常测试是在抛出异常的代码中放入 try 块,然后在 try 块的末尾加入一个 fail() 语句。例如,该方法测试被零除抛出一个 ArithmeticException:

public void testDivisionByZero() {

try {

int n = 2 / 0;

fail("Divided by zero!");

}

catch (ArithmeticException success) {

assertNotNull(success.getMessage());

}

} 

该方法不仅难看,而且试图挑战代码覆盖工具,因为不管测试是通过还是失败,总有一些代码不被执行。在 JUnit 4 中,您现在可以编写抛出异常的代码,并使用注释来声明该异常是预期的:

@Test(expected=ArithmeticException.class) 

public void divideByZero() {

int n = 2 / 0;

} 

如果该异常没有抛出(或者抛出了一个不同的异常),那么测试就将失败。但是如果您想要测试异常的详细消息或其他属性,则仍然需要使用旧式的 try-catch 样式。

2. 可以忽略到测试:

也许您有一个测试运行的时间非常地长。不是说这个测试应该运行得更快,而是说它所做的工作从根本上比较复杂或缓慢。需要访问远程网络服务器的测试通常都属于这一类。如果您不在做可能会中断该类测试的事情,那么您可能想要跳过运行时间长的测试方法,以缩短编译-测试-调试周期。或者也许是一个因为超出您的控制范围的原因而失败的测试。例如,W3C XInclude 测试套件测试 Java 还不支持的一些 Unicode 编码的自动识别。不必老是被迫盯住那些红色波浪线,这类测试可以被注释为 @Ignore,如下所示:

// Java doesn't yet support 

// the UTF-32BE and UTF32LE encodings

@Ignore public void testUTF32BE() 

throws ParsingException, IOException, XIncludeException {

File input = new File("data/xinclude/input/UTF32BE.xml");

Document doc = builder.build(input);

Document result = XIncluder.resolve(doc);

Document expectedResult = builder.build(new File(outputDir, "UTF32BE.xml"));

assertEquals(expectedResult, result);

} 

测试运行程序将不运行这些测试,但是它会指出这些测试被跳过了。

但是一定要小心。最初编写这些测试可能有一定的原因。如果永远忽略这些测试,那么它们期望测试的代码可能会中断,并且这样的中断可能不能被检测到。忽略测试只是一个权宜之计,不是任何问题的真正解决方案。

posted on 2009-07-27 19:10  cxccbv  阅读(1413)  评论(0编辑  收藏  举报

导航