проверьте код ошибки с помощью @rule в junit
Я нашел @Rule
аннотацию в jUnit
для лучшей обработки исключений.
Есть ли способ проверить код ошибки ?
В настоящее время мой код выглядит так (без @Rule):
@Test
public void checkNullObject() {
MyClass myClass= null;
try {
MyCustomClass.get(null); // it throws custom exception when null is passed
} catch (CustomException e) { // error code is error.reason.null
Assert.assertSame("error.reason.null", e.getInformationCode());
}
}
Но с использованием @Rule
, я делаю следующее:
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void checkNullObject() throws CustomException {
exception.expect(CustomException .class);
exception.expectMessage("Input object is null.");
MyClass myClass= null;
MyCustomClass.get(null);
}
Но, я хочу сделать что-то вроде ниже:
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void checkNullObject() throws CustomException {
exception.expect(CustomException .class);
//currently below line is not legal. But I need to check errorcode.
exception.errorCode("error.reason.null");
MyClass myClass= null;
MyCustomClass.get(null);
}
2 ответа:
Вы можете использовать пользовательский сопоставитель для правила с помощью метода
expect(Matcher<?> matcher)
.Например:
public class ErrorCodeMatcher extends BaseMatcher<CustomException> { private final String expectedCode; public ErrorCodeMatcher(String expectedCode) { this.expectedCode = expectedCode; } @Override public boolean matches(Object item) { CustomException e = (CustomException)item; return expectedCode.equals(e.getInformationCode()); } }
И в испытании:
exception.expect(new ErrorCodeMatcher("error.reason.null"));
Вы также можете увидеть, как
expect(Matcher<?> matcher)
был использован в ExpectedException.java sourceprivate Matcher<Throwable> hasMessage(final Matcher<String> matcher) { return new TypeSafeMatcher<Throwable>() { @Override public boolean matchesSafely(Throwable item) { return matcher.matches(item.getMessage()); } }; } public void expectMessage(Matcher<String> matcher) { expect(hasMessage(matcher)); }