Я размышляю о лучших практиках обработки исключений и модульных тестов, потому что мы пытаемся внедрить некоторые передовые практики кода.
A previous В статье о передовых методах, найденной на вики нашей компании, говорится: «Не используйте try / catch, а используйте Junit4 @Test (expect = MyException.class)» без дополнительной информации. Я не уверен.
Многие из наших настраиваемых исключений имеют Enum для определения причины сбоя. В результате я бы предпочел увидеть такой тест:
@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 при необходимости?