繁体   English   中英

在 JUnit 测试中假设与断言

[英]Assume vs assert in JUnit tests

我读过如果假设失败, assume将不会运行测试,但我不确定何时放置assertassume的逻辑。

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

我什么时候应该使用assume不是assert

(注意:我正在寻找何时使用一个而不是另一个的正确设计)

如果在某些情况下根本不应运行某些测试,则可以使用assume “不运行”意味着它不会失败,因为它没有运行。

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

所以,在一个假设的场景中:

  • 您为不同的客户提供不同的版本,并且
  • 您有一些仅适用于特定客户的资源,并且
  • 有一些关于该资源的可测试性,然后

你会写一个测试:

  • 假设资源存在,(因此测试不会在没有该资源的客户上运行),然后
  • 断言关于资源的一切都没有问题(因此对于确实拥有资源的客户,测试确保资源是它应该的样子。)

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

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

assert<something>(“Failure Message String”, <condition to be tested>);

假设:您可能听说过最好不要进行假设,所以这里有一个测试工具 JUnit 为您提供,以确保您的测试不会。

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

有四种假设:一种检查布尔条件,一种检查未发生异常,一种检查空对象,一种可以采用 Hamcrest 匹配器。 如上面的断言部分所示,采用 Hamcrest 匹配器的能力是测试灵活性的途径。

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

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

只需查看假设的javadoc

一组方法,用于陈述有关测试有意义的条件的假设。 失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息。

换句话说:当断言触发时,您知道您的测试用例失败了 您的生产代码没有按照您的预期运行。

假设意味着......你不知道到底发生了什么。

Assert 和 Assume 之间最简单的区别是:

Assume只会在假设成立时运行。 如果为 false 将被跳过。

assumeTrue(boolean assumption, String message)

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

assertTrue(boolean condition, String message)

JUnit assert用于为我们的测试方法编写测试场景。 assume用于验证我们的测试用例的有利条件。

如果JUnit assert失败,则测试失败 如果junit assumptions失败,则跳过测试方法

在这里阅读更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM