1. 概述

在这个教程中,我们将探讨如何在常见的测试场景中使用JUnit的fail断言。

我们还将比较一下JUnit 4JUnit 5fail方法的不同之处。

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

除了failfail(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上找到。