在我的一个JUnit测试中,我正在初始化一个对象:
MyObject myObject = new MyObject(220, 120, 0.05, true);
构造函数的签名是:
public MyObject(int minLength, int maxLength,
double onBitsRatio, boolean forceAtLeastOneBitOn)
其次是:
assert(onBitsRatio >= 0.0 && onBitsRatio <= 1.0);
assert(maxLength>=minLength);
assert(false);
奇怪的是,断言不会像我期望的那样停止执行。
为什么JUnit会忽略这些断言?
答案 0 :(得分:16)
JUnit并没有忽略这些断言,因为正如你所说,你使用的是Java的assert
关键字。这由JVM处理,而不是JUnit。
几乎可以肯定,您的JVM断言已关闭。事实上,除非你用-ea
打开它们,否则它们会关闭。否则会忽略这些。
答案 1 :(得分:4)
您确定从JUnit使用正确的断言吗?
如果您使用普通的java断言,默认情况下会关闭它们。您必须明确启用它们。
尝试使用此功能:org.junit.Assert.assertTrue(false)
据我所知,JUnit Assert库中没有只调用assert()
看到你的断言在某个对象中,并且你希望测试失败,那么你需要启用断言。 请查看描述如何启用断言的this tutorial。
答案 2 :(得分:1)
将它们更改为JUnit断言,您使用的是Java assertions,它在jvm中默认禁用:
assertTrue(onBitsRatio >= 0.0 && onBitsRatio <= 1.0);
assertTrue(maxLength>=minLength);
assertTrue(false);
如果您确实想使用java断言,请确保在运行配置中将-enableassertions
作为参数。
根据你的问题标签你正在使用eclipse,所以去运行 - &gt;运行配置并在VM参数选项卡中添加-enableassertions
或-ea
。
答案 3 :(得分:1)
来自 Java完整参考:
&#34; 要在运行时启用断言检查,必须指定-ea选项。例如,要为AssertDemo启用断言,请使用以下行执行它:
java -ea AssertDemo
&#34;