我已经读到如果假设失败,assume将不会运行测试,但我不确定何时放置assert与assume的逻辑。举例来说:任何资源加载检查都应该用assume来完成?什么时候应该使用assume而不是assert?(Note:我正在寻找正确的设计时,使用一个超过其他)
assume
assert
xv8emn3q1#
正如您已经知道的,如果出现错误,可以使用assert来使测试失败。如果在某些情况下不应该运行测试,则可以使用assume。“不运行”意味着它不会失败,因为,嗯,它没有运行。所以,在一个假设的场景中:
你会写一个测试:
从技术上讲,assert和assume都抛出异常。区别在于:
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用于测试功能。
Assume.assumeFalse(System.getProperty("os.name").contains("Linux"));
u5i3ibmn3#
Assert和Assume之间最简单的区别是:
假设仅在假设为真时运行。如果为false,则将跳过。
assumeTrue(boolean assumption, String message)
Assert如果为true,则正常运行。在false assert的情况下,它给出预定义的错误消息。
assertTrue(boolean condition, String message)
ubby3x7f4#
简单地检查javadoc的假设:一组方法,用于说明关于测试有意义的条件的假设。失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息。换句话说:当一个assert被触发时,你知道你的测试用例失败了。您的生产代码没有按照您的预期运行。
4条答案
按热度按时间xv8emn3q1#
正如您已经知道的,如果出现错误,可以使用
assert
来使测试失败。如果在某些情况下不应该运行测试,则可以使用
assume
。“不运行”意味着它不会失败,因为,嗯,它没有运行。所以,在一个假设的场景中:
你会写一个测试:
从技术上讲,
assert
和assume
都抛出异常。区别在于:assert
抛出的异常类型将导致测试失败,而assume
抛出的异常类型将导致跳过测试。crcmnpdw2#
Assert类是JUnit的主力,也是JUnit测试人员最熟悉的类。大多数JUnitAssert签名在本质上是相似的。它们由一个可选消息、一个预期的示例或变量以及要比较的实际示例或变量组成。或者,在布尔测试(如True、False或False)的情况下,只需要测试实际的示例。
带有消息的签名只有一个初始参数,其中包含一个消息字符串,在Assert失败时将显示该字符串:
假设:您可能听说过,最好不要在假设的基础上工作,所以这里是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用于测试功能。
u5i3ibmn3#
Assert和Assume之间最简单的区别是:
假设仅在假设为真时运行。如果为false,则将跳过。
Assert如果为true,则正常运行。在false assert的情况下,它给出预定义的错误消息。
ubby3x7f4#
简单地检查javadoc的假设:
一组方法,用于说明关于测试有意义的条件的假设。失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息。
换句话说:当一个assert被触发时,你知道你的测试用例失败了。您的生产代码没有按照您的预期运行。