在 JUnit 测试中假设与断言

2022-09-01 10:36:31

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

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

我应该什么时候使用?assumeassert

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


答案 1

如果您遇到某些测试根本不应运行的情况,则可以使用。“不运行”意味着它不能失败,因为,好吧,它没有运行。assume

如果出现问题,您将无法通过测试。assert

因此,在假设的场景中:

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

你会写一个测试:

  • 假定资源存在(因此测试不会在没有该资源的客户上运行),然后
  • 断言有关资源的所有内容都正常(因此,在实际拥有该资源的客户上,测试将确保资源处于应有的状态。

答案 2

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

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

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

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

断言和假定在测试失败时都停止,然后转到下一个测试。不同之处在于,失败的 Assert 将失败注册为失败的测试,而假设只是移动到下一个测试。这允许测试人员确保在运行测试之前根据需要存在条件(其中一些可能是外部条件,并且不受测试人员的控制)。

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

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

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


推荐