gpt4 book ai didi

java - 如果我想使用 JUnit,是否禁止使用 AssertionErrors?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:08 25 4
gpt4 key购买 nike

我有一个方法,在特定的处理点期间,它期望保留某些不变量。
为了保持这种微不足道,假设在代码处理过程中的 X 点,变量 high 和变量 low 必须是可整除的。
所以在我的代码中:

if(high % low != 0){  
throw new AssertionError("Invalid state of low and high [low = "+ low+ ", high=" + high+"]");
}

在使用 JUnits 进行单元测试期间,我有一个测试用例来对此进行测试。
所以我做了:

try {
//At this point I know for sure that the low and high are not divible so process() should throw an Assertion Error
process();
fail();
}
catch(AssertionError e){
}

但是测试用例是绿色的!
但我意识到 junit 由于 fail 引发了断言错误,但我捕获了它,结果测试用例通过而不是失败。
从我的角度来看,在我的代码中引发的正确错误也是 AssertionError 而不是一些通用的错误,例如IllegalArgumentsException
那么有没有办法解决这个问题,以便测试用例正常工作,或者我不应该首先在我的代码中使用 AssertionError ?如果是这种情况,我应该提出什么异常(exception)?

最佳答案

单元测试中不应该有 try-catch block 。如果您希望出现异常,请使用注释:

@Test(expected=Exception.class)
public void youTestMethod() {
...
}

您必须使用不同的异常,例如 IllegalArgumentsException,因为 JUnit 在内部使用 AssertionError。我发现 IllegalArgumentsException 更能描述实际出错的地方。

关于java - 如果我想使用 JUnit,是否禁止使用 AssertionErrors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10462565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com