Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 断言(false)不会停止执行_Java_Eclipse_Junit_Assert - Fatal编程技术网

Java 断言(false)不会停止执行

Java 断言(false)不会停止执行,java,eclipse,junit,assert,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 &&

在我的一个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);
assert(onBitsRatio>=0.0&&onBitsRatio=minLength);
断言(假);
奇怪的是,断言并没有像我期望的那样停止执行


为什么JUnit会忽略这些断言?

您确定使用的是JUnit中正确的断言吗

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

尝试使用以下命令:
org.junit.Assert.assertTrue(false)
据我所知,JUnit Assert库中没有一个方法只被称为
Assert()

由于断言位于某个对象中,并且希望测试失败,因此需要启用断言。
请看一看如何启用断言。

将它们更改为JUnit断言,您使用的是在jvm中默认禁用的plain断言:

assertTrue(onBitsRatio >= 0.0 && onBitsRatio <= 1.0);
assertTrue(maxLength>=minLength);
assertTrue(false);
assertTrue(onBitsRatio>=0.0&&onBitsRatio=minLength);
资产真(假);
如果确实要使用java断言,请确保在运行配置中有
-enableassertions
作为参数


根据您的问题标签,您正在使用eclipse,因此请转到RunAs->run Configuration并在VM arguments选项卡中添加
-enableassertions
-ea

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

答案几乎肯定是JVM断言已关闭。事实上,它们是关闭的,除非您使用
-ea
打开它们。否则将忽略这些内容。

来自Java的完整参考:

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

java-eaassertdemo

我没有使用JUnit的Assert,只是使用普通的java Assert.And
Assert.assertTrue(false)
实际上停止了执行,并通过
java.lang.AssertionError
使测试失败。您不应该在JUnit测试中使用java断言。您应该使用JUnit断言。如果要启用java断言,必须使用-eaJVM选项。我认为
assert
不是测试的一部分。它是正在测试的对象的一部分,并且它正在断言其内部状态。@SeanOwen-确切地说,这些
assert()
s属于正在测试的类,而不是JUnit测试。无法解释为什么在另一个答案中有这么多的Upvots是错误的/不完整的。。。民主并不总是如此有效。我投了你的一票,因为它直截了当,没有引起任何混乱。另外,看起来你在检查论点。这不是资产的用途。如果您断言无论外部输入如何,程序的任何状态都不会使这些条件失效,那么这是正确的。通常是关于私人物品的断言。