我在思考异常处理和单元测试的最佳实践,因为我们试图获得一些代码最佳实践。JUnit4 @Test(expected = MyException.class)VS try/catch
上一篇关于最佳实践的文章,在我们的公司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?
事实上,当我看到你们说异常层级被怀疑时,我很开心,它已经困扰了我一段时间。 (IT可能就是为什么我在思考这些问题;))。谢谢! – Stph 2011-06-15 15:18:21