assert(false)不会停止执行

时间:2012-12-12 12:23:50

标签: java eclipse junit assert

在我的一个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会忽略这些断言?

4 个答案:

答案 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;