如何以编程方式测试断言是否已启用?

时间:2012-10-23 11:57:43

标签: java scjp assertion ocpjp

OCP Java SE 6程序员实践考试的正确答案之一是:

  

您可以通过编程方式测试已启用的断言   没有抛出AssertionError

我该怎么做?

6 个答案:

答案 0 :(得分:26)

我用这个

boolean assertOn = false;
// *assigns* true if assertions are on.
assert assertOn = true; 

我不确定这是“官方”方式。

答案 1 :(得分:21)

答案 2 :(得分:16)

Oracle Java Tutorial提供了有关如何操作的信息......

http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html

教程摘录

  

7。为什么不提供一个构造来查询包含类的断言状态?

     

这样的结构会鼓励人们内联复杂的断言   代码,我们认为这是一件坏事。此外,它是直截了当的   如果您认为必须,请查询当前API顶部的断言状态:

boolean assertsEnabled = false;
assert assertsEnabled = true; // Intentional side-effect!!!
// Now assertsEnabled is set to the correct value

答案 3 :(得分:2)

RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
boolean assertionsEnabled = mx.getInputArguments().contains("-ea");

答案 4 :(得分:0)

package io.github.baijifeilong.tmp;

import io.vavr.control.Try;

/**
 * Created by BaiJiFeiLong@gmail.com at 2019-04-18 09:12
 */
public class TmpApp {

    public static void main(String[] args) {
        Try.run(() -> {
            assert false;
        }).onSuccess($ -> {
            throw new RuntimeException("Assertion is not enabled");
        });
    }
}

也许可以帮助某人。

答案 5 :(得分:0)

我正在使用jdk.nashorn.internal中的AssertsEnabled。

System.out.println(AssertsEnabled.assertsEnabled());
// "assertsEnabled()" returns boolean value

也许可以帮助某人。