断言失败 - 检查字段大于

时间:2013-09-18 14:22:14

标签: java

我试图使用断言stmt来检查一个值是否大于1但是它没有按预期工作。

public class asserttest {
    static void methoda(int i){
        assert (i > 1);
        System.out.println("This is methoda");
    }
    public static void main(String[] args){
        methoda(-1);
    }
}

输出: 这是方法

预期产量: - 的AssertionError

我能够通过启用断言来修复它。

2 个答案:

答案 0 :(得分:2)

我的猜测是你被默认情况下没有启用的断言搞糊涂了。使用-enableassertions命令行选项:

java -enableassertions asserttest

您还可以将断言限制为特定包,并使用-disableassertions将包指定为禁用

我个人更喜欢无条件验证参数值,正是因为这个 - 我不喜欢在测试中以“安全”模式运行代码的想法,但是让它在生产与安全关闭。这就像学会驾驶安全带一样开车,然后在没有任何保护的情况下进入F1比赛......

答案 1 :(得分:0)

一般情况下,不应对参数或任何输入值使用断言。

断言是为了描述不变量,它应该始终是true。因此,出于性能原因可以将它们关闭。你必须启用它们,例如使用-ea JVM选项。

但是应始终检查方法的输入,因此请使用

if(i<=1) throw new IllegalArgumentException("i must be >1");