6

在我的一个 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

4 回答 4

22

JUnit 不会忽略这些断言,因为正如您所说,您正在使用 Java 的assert关键字。这是由 JVM 处理的,而不是 JUnit。

答案几乎可以肯定是您的 JVM 断言已关闭。实际上它们是关闭的,除非你用-ea. 否则这些将被忽略。

于 2012-12-12T12:31:01.363 回答
6

您确定您使用的是来自 JUnit 的正确断言吗?

如果您使用的是普通的 java 断言,这些默认情况下是关闭的。您必须明确启用它们。

尝试使用这个:org.junit.Assert.assertTrue(false) 据我所知,JUnit Assert 库中没有方法被调用assert()

看到您的断言在某个对象中,并且您希望测试失败,那么您需要启用断言。查看本教程,了解如何启用断言。

于 2012-12-12T12:26:44.063 回答
2

将它们更改为 JUnit 断言,您使用的是普通Java 断言,默认情况下在 jvm 中禁用:

assertTrue(onBitsRatio >= 0.0 && onBitsRatio <= 1.0);
assertTrue(maxLength>=minLength);
assertTrue(false);

如果你真的想使用 java 断言,请确保你-enableassertions在运行配置中有一个参数。

根据您使用 eclipse 的问题标签,因此请转到运行方式 -> 运行配置并在 VM 参数选项卡中添加-enableassertions-ea

于 2012-12-12T12:29:06.747 回答
1

来自Java 的完整参考

" 要在运行时启用断言检查,您必须指定 -ea 选项。例如,要为 AssertDemo 启用断言,请使用以下行执行它:

java -ea AssertDemo "

于 2016-10-09T06:23:55.930 回答