我了解到,如果假设失败,assume
不会运行测试,但我不确定何时应该使用 assert
和 assume
的逻辑。
例如:任何资源加载检查都应该使用assume
吗?
我应该在什么情况下使用assume
而不是assert
?
(注:我正在寻找正确的设计,以便在两者之间进行选择)
我了解到,如果假设失败,assume
不会运行测试,但我不确定何时应该使用 assert
和 assume
的逻辑。
例如:任何资源加载检查都应该使用assume
吗?
我应该在什么情况下使用assume
而不是assert
?
(注:我正在寻找正确的设计,以便在两者之间进行选择)
assert
来使测试失败。assume
。"不运行"意味着它无法失败,因为它根本没有运行。assert
和assume
都会抛出异常。区别在于:
assert
抛出的异常类型会导致测试失败,而assume
抛出的异常类型会导致测试被跳过。断言(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/
简而言之,Assume 用于禁用测试,例如以下代码会禁用 Linux 上的测试:Assume.assumeFalse(System.getProperty("os.name").contains("Linux"));
Assert 用于测试功能。
assumeTrue(boolean assumption, String message)
Assert(断言) 在条件为真时运行正常。如果条件为假,则会给出预定义的错误消息。
assertTrue(boolean condition, String message)
只需查看javadoc,即可了解Assume:
一组有用的方法,用于说明测试具有意义的条件。失败的假设并不意味着代码有问题,而是测试提供的信息没有用处。
换句话说:当assert触发时,您知道测试用例失败了。您的生产代码并未按预期执行。
假设的意思是...您不确定发生了什么。