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

标签 java unit-testing junit assert

我有一个方法,在特定的处理点期间,它期望保留某些不变量。
为了保持这种微不足道,假设在代码处理过程中的 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/

相关文章:

java - 为什么 .equals 方法在两个相同的值对象上失败?

java - 单元测试 Junit NullPointerException 和 NoSuchElement 有帮助!休息终点

java - JUnit:创建JavaBean时测试int类型的ID是否为null

java - Apache Camel : Send Text Message with Twilio

Java 接口(interface)使用指南——接口(interface)中的 getter 和 setter 是否不好?

java - 暂停执行 main 方法中的循环,直到所有线程完成 Java 1.5

c# - 如何使用 FakeItEasy 断言未调用方法

java - 我如何告诉 wsimport 使用代理异常 url

ios - 使用 Set 时,Swift 2.0 : Could not cast value MyApp. MyCustomClass 到 MyAppTests.MyCustomClass

java - JUnit5 Gradle 插件文件名或扩展名太长