在JUnit测试中假设vs断言

Mik*_*ike 14 java junit unit-testing

assume如果假设失败,我已经读过不会运行测试,但我不确定何时放置assertvs 的逻辑assume.

例如:任何资源加载检查应该用assume

我什么时候应该assume用完assert

(注意:我正在寻找何时使用其中一个的正确设计)

Mik*_*kis 18

assume如果您遇到某些测试根本不应运行的情况,您可以使用."不运行"意味着它不会失败,因为它没有运行.

assert如果出现问题,您将使用测试失败.

因此,在假设情景中:

  • 你有不同的构建,为不同的客户,和
  • 你有一些资源只适用于特定的客户,和
  • 那么有关该资源的可测试性

你会写一个测试:

  • 假设资源存在(因此测试不会在没有该资源的客户上运行),然后
  • 断言关于资源的一切都是可以的(所以对于实际拥有资源的客户,测试确保资源是应该的.)


Nat*_*ski 7

Assert类是JUnit的主力,是JUnit测试人员最熟悉的类.大多数JUnit断言签名本质上是相似的.它们由可选消息,预期实例或变量以及要比较的实际实例或变量组成.或者,在布尔测试(如True,False或Null)的情况下,只需要测试的实际实例.

带有消息的签名只有一个带有消息字符串的初始参数,该消息字符串将在断言失败时显示:

assert<something>(“Failure Message String”, <condition to be tested>);
Run Code Online (Sandbox Code Playgroud)

假设:您可能听说过最好不要处理假设,所以这里有一个测试工具JUnit可以确保您的测试不会.

当测试失败时,Asserts和Assumes都会停止,然后继续进行下一个测试.不同之处在于失败的Assert将失败注册为失败的测试,而Assume只是移动到下一个测试.这允许测试者确保在测试运行之前根据需要存在条件,其中一些可能是外部的并且不受测试者的控制.

Assumes有四种:一种用于检查布尔条件,一种用于检查未发生异常,一种用于检查空对象,另一种用于检查Hamcrest匹配器.如上面的Assert部分所示,使用Hamcrest匹配器的能力是测试灵活性的门户.

你可以在这里阅读更多内容 https://objectcomputing.com/resources/publications/sett/march-2014-junit-not-just-another-pretty-assert/

简而言之,假设用于禁用测试,例如以下禁用Linux上的测试:Assume.assumeFalse(System.getProperty("os.name").contains("Linux"));
Assert用于测试功能.


小智 5

断言和假设之间最简单的区别是:

假设仅当假设为真时才会运行。如果为 false 将被跳过。

assumeTrue(boolean assumption, String message)
Run Code Online (Sandbox Code Playgroud)

如果为真,断言将正常运行。如果出现错误断言,它会给出预定义的错误消息。

assertTrue(boolean condition, String message)
Run Code Online (Sandbox Code Playgroud)