java - JUnit4 @Test(expected=MyException.class) VS try/catch

标签 java exception junit4

我正在考虑异常处理和单元测试的最佳实践,因为我们正试图获得一些代码最佳实践。

我们公司 wiki 上的一篇关于最佳实践的文章指出“不要使用 try/catch,但使用 Junit4 @Test(expect=MyException.class)”,但没有提供更多信息。我不相信。

我们的许多自定义异常都有一个枚举,以便识别失败原因。 因此,我宁愿看到这样的测试:

@Test
public void testDoSomethingFailsBecauseZzz() {
try{
   doSomething();
} catch(OurCustomException e){
   assertEquals("Omg it failed, but not like we planned", FailureEnum.ZZZ, e.getFailure());
}
}

比:

@Test(expected = OurCustomException.class)
public void testDoSomethingFailsBecauseZzz() {
   doSomething();
}

当 doSomethig() 看起来像:

public void doSomething throws OurCustomException {
  if(Aaa) {
     throw OurCustomException(FailureEnum.AAA);
  } 
  if(Zzz) {
     throw OurCustomException(FailureEnum.ZZZ);
  }
  // ...
}

附带说明一下,我非常相信在某些情况下 @Test(expected=blabla.class) 是最佳选择(例如,当异常是精确的并且毫无疑问是什么导致它时)。

我是不是遗漏了什么,或者我应该在必要时插入使用 try/catch 吗?

最佳答案

听起来您的枚举被用作异常层次结构的替代品?也许如果您有异常层次结构,@Test(expected=XYZ.class) 会变得更有用吗?

关于java - JUnit4 @Test(expected=MyException.class) VS try/catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6359616/

相关文章:

java - 使用 JUnit 比较两个 TreeMap

java - OSGI 包中的依赖关系出现问题

java.lang.OutOfMemoryError,什么时候回收内存?

java - Apache HttpClient ResponseHandler 异常

java - 如何使用 Junit Core 生成 Junit 报告

java - 如何使用isA-Matcher

java - 多次匹配后视/前视

java - 为什么这不排除元音?

exception - 如何找到 "ignored"的异常?

PowerShell:奇怪的异常处理