我已经读过如果假设失败,assume
将无法运行测试,
但我不确定何时放置assert
vs assume
的逻辑。
例如:任何资源加载检查都应该使用assume
?
我应该何时使用assume
而不是assert
?
(注意:我正在寻找何时使用其中一个的正确设计)
答案 0 :(得分:18)
如果您遇到某些测试根本无法运行的情况,您可以使用assume
。 "没有运行"意味着它不会失败,因为它没有运行。
如果出现问题,您可以使用assert
来验证测试失败。
所以,在假设情景中:
你会写一个测试:
答案 1 :(得分:7)
Assert 类是JUnit的主力,是JUnit测试人员最熟悉的类。大多数JUnit断言签名本质上是相似的。它们由可选消息,预期实例或变量以及要比较的实际实例或变量组成。或者,在布尔测试(如True,False或Null)的情况下,只需要测试的实际实例。
带有消息的签名只有一个带有消息字符串的初始参数,该消息字符串将在断言失败的情况下显示:
assert<something>(“Failure Message String”, <condition to be tested>);
<强>假设强>: 您可能听说过最好不要处理假设,所以这里有一个测试工具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"));
断言用于测试功能。
答案 2 :(得分:2)
只需查看javadoc的假设:
一组方法,用于说明关于测试有意义的条件的假设。失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息。
换句话说:当断言触发时,您知道您的测试用例失败。您的生产代码没有按照您的预期执行。
假设意味着......你不确切知道发生了什么。
答案 3 :(得分:1)
Assert和Assume之间最简单的区别是:
假设仅在假设为真时运行。如果为假,将被跳过。
AndroidMenifest.xml
如果为true,声明将正常运行。 在断言为假的情况下,它会提供预定义的错误消息。
<application
android:label=""
android:theme="@style/AppTheme">
<activity
.
.
.
.
</activity>
</application>