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

Я размышляю о лучших практиках обработки исключений и модульных тестов, потому что мы пытаемся внедрить некоторые передовые практики кода.

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 при необходимости?

5
задан Stph 15 June 2011 в 14:46
поделиться