JUnit测试中的Assume vs Assert

mo49yndu  于 2023-10-20  发布在  其他
关注(0)|答案(4)|浏览(183)

我已经读到如果假设失败,assume将不会运行测试,但我不确定何时放置assertassume的逻辑。
举例来说:任何资源加载检查都应该用assume来完成?
什么时候应该使用assume而不是assert
(Note:我正在寻找正确的设计时,使用一个超过其他)

xv8emn3q

xv8emn3q1#

正如您已经知道的,如果出现错误,可以使用assert来使测试失败。
如果在某些情况下不应该运行测试,则可以使用assume。“不运行”意味着它不会失败,因为,嗯,它没有运行。
所以,在一个假设的场景中:

  • 你为不同的客户提供不同的版本,
  • 你有一些只适用于特定客户端的资源,
  • 这个资源是可以测试的,

你会写一个测试:

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

从技术上讲,assertassume都抛出异常。区别在于:

  • assert抛出的异常类型将导致测试失败,而
  • assume抛出的异常类型将导致跳过测试。
crcmnpdw

crcmnpdw2#

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

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

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

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

Assert和假设都在测试失败时停止,并继续进行下一个测试。不同之处在于,失败的Assert将失败注册为失败的测试,而Assume只是移动到下一个测试。这允许测试人员确保在测试运行之前,根据需要存在条件,其中一些条件可能是外部的并且不受测试人员的控制。
假设有四种:一个用于检查布尔条件,一个用于检查是否发生异常,一个用于检查空对象,还有一个可以使用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用于测试功能。

u5i3ibmn

u5i3ibmn3#

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

假设仅在假设为真时运行。如果为false,则将跳过。

assumeTrue(boolean assumption, String message)

Assert如果为true,则正常运行。在false assert的情况下,它给出预定义的错误消息。

assertTrue(boolean condition, String message)
ubby3x7f

ubby3x7f4#

简单地检查javadoc的假设:
一组方法,用于说明关于测试有意义的条件的假设。失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息。
换句话说:当一个assert被触发时,你知道你的测试用例失败了。您的生产代码没有按照您的预期运行。

  • 假设 * 的意思是...你不知道到底发生了什么

相关问题