1. 概述
在这个教程中,我们将探讨如何在常见的测试场景中使用JUnit的fail
断言。
我们还将比较一下JUnit 4和JUnit 5中fail
方法的不同之处。
2. 使用fail
断言
fail
断言会无条件地引发一个AssertionError
来失败测试。
在编写单元测试时,我们可以利用fail
在预期的测试条件下明确创建失败情况。 让我们看看这在哪些情况下会有帮助。
2.1. 不完整或未实现的测试
当测试不完整或尚未实现时,我们可以让它失败:
0430719d-19cc-4711-a147-f3fb5a83f4f7
2.2. 预期异常
当我们认为某个异常将发生时,也可以这样做:
f44de041-1429-4a89-b2a4-00b18d16499e
2.3. 非预期异常
当期望不抛出异常但实际抛出了时,可以使用fail
来标记测试失败:
c6115fdd-365c-4d23-ba9b-ebfe8f8a813e
2.4. 测试条件
当结果不符合某些期望条件时,我们可以调用fail
:
f05aeeb8-25ba-40b6-ab49-df92834f894c
2.5. 代码未按预期返回或退出
最后,当代码没有按预期返回或跳出时,也可以失败测试:
c39973f6-ce67-49e8-8479-05e52fa89ec7
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)
此外,在JUnit 5中,所有形式的fail
都被声明为public static <V> V fail()
。泛型返回类型V
允许这些方法在lambda表达式中作为单行语句使用:
12357d4e-0919-4078-b023-266ce49326f3
4. 总结
在这篇文章中,我们讨论了JUnit中fail
断言的一些实用用例。有关JUnit 4和5中所有可用断言的详细信息,请参阅junit-assertions。
我们也强调了JUnit 4和5之间的主要差异,以及fail
方法的一些有用增强。
如往常一样,文章的完整源代码可在GitHub上找到。