verifique o código de erro com @rule in junit

Eu encontrei a anotação @Rule no jUnit para melhor lidar com a exceção. Existe uma maneira de verificar o código de erro?

Atualmente, meu código parece com (sem @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()); } } 

Mas com o uso do @Rule , estou fazendo o seguinte:

  @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); } 

Mas eu quero fazer algo como abaixo:

  @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); } 

Você pode usar um correspondente personalizado na regra com o método expect(Matcher matcher) .

Por exemplo:

 public class ErrorCodeMatcher extends BaseMatcher { 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()); } } 

e no teste:

 exception.expect(new ErrorCodeMatcher("error.reason.null")); 

Você também pode ver como o expect(Matcher matcher) foi usado dentro da fonte ExpectedException.java

 private Matcher hasMessage(final Matcher matcher) { return new TypeSafeMatcher() { @Override public boolean matchesSafely(Throwable item) { return matcher.matches(item.getMessage()); } }; } public void expectMessage(Matcher matcher) { expect(hasMessage(matcher)); }