1. 概述
在本教程中,我们将探讨如何在常见测试场景中使用JUnit fail断言。
我们还将看到JUnit 4和JUnit 5之间的fail()方法差异。
2. 使用fail断言
fail断言未通过无条件抛出AssertionError的测试。
在编写单元测试时,我们可以使用fail在所需的测试条件下显式创建失败。让我们看看这可能会有所帮助的一些情况。
2.1 不完整的测试
当测试不完整或尚未实现时,我们可以使测试失败:
@Test
public void incompleteTest() {
fail("Not yet implemented");
}
2.2 预期异常
当我们认为会发生异常时,我们也可以这样做:
@Test
public void expectedException() {
try {
methodThrowsException();
fail("Expected exception was not thrown");
} catch (Exception e) {
assertNotNull(e);
}
}
2.3 意外异常
当预期不会抛出异常时测试失败是另一种选择:
@Test
public void unexpectedException() {
try {
safeMethod();
// more testing code
} catch (Exception e) {
fail("Unexpected exception was thrown");
}
}
2.4 测试条件
当结果不满足某些所需条件时,我们可以调用fail():
@Test
public void testingCondition() {
int result = randomInteger();
if(result > Integer.MAX_VALUE) {
fail("Result cannot exceed integer max value");
}
// more testing code
}
2.5 返回之前
最后,当代码没有按预期返回/中断时,我们可能会使测试失败:
@Test
public void returnBefore() {
int value = randomInteger();
for (int i = 0; i < 5; i++) {
// returns when (value + i) is an even number
if ((i + value) % 2 == 0) {
return;
}
}
fail("Should have returned before");
}
3. JUnit 5与JUnit 4
JUnit 4中的所有断言都是org.junit.Assert类的一部分。对于JUnit 5,这些已移至org.junit.jupiter.api.Assertions。
当我们在JUnit 5中调用fail并得到异常时,我们会收到一个AssertionFailedError而不是JUnit 4中的AssertionError。
除了fail()和fail(String message),JUnit 5还包括一些其他有用的重载:
- fail(Throwable cause)
- fail(String message, Throwable cause)
- fail(Supplier<String> messageSupplier)
此外,所有形式的fail在JUnit 5中都被声明为public static <V> V fail()。泛型返回类型V允许将这些方法用作lambda表达式中的单语句:
Stream.of().map(entry -> fail("should not be called"));
4. 总结
在本文中,我们介绍了JUnit中fail断言的一些实际用例。有关JUnit 4和JUnit 5中所有可用的断言,请参阅JUnit断言。
我们还强调了JUnit 4和JUnit 5之间的主要区别,以及fail方法的一些有用的增强功能。
与往常一样,本文的完整源代码可在GitHub上找到。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章