Java 断言(false)不会停止执行
在我的一个JUnit测试中,我正在初始化一个对象: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 &&
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是错误的/不完整的。。。民主并不总是如此有效。我投了你的一票,因为它直截了当,没有引起任何混乱。另外,看起来你在检查论点。这不是资产的用途。如果您断言无论外部输入如何,程序的任何状态都不会使这些条件失效,那么这是正确的。通常是关于私人物品的断言。