2

使用しないこの古いコードを使用するExpectedExceptionようにリファクタリングしようとしてます。

    try {
        //...
        fail();
    } catch (UniformInterfaceException e) {
        assertEquals(404, e.getResponse().getStatus());
        assertEquals("Could not find facility for aliasScope = DOESNTEXIST", e.getResponse().getEntity(String.class));
    }

e.getResponse().getStatus()またはe.getResponse().getEntity(String.class)の値を確認する方法がわからないため、これを行う方法がわかりませんExpectedException。hamcrest を取るexpectExpectedExceptionメソッドがあることがわかります。それが鍵かもしれませんが、それをどのように使用するかは正確にはわかりません。 Matcher

その状態が具体的な例外にのみ存在する場合、例外が必要な状態にあると断言するにはどうすればよいですか?

4

1 に答える 1

3

「最良の」方法は、ここで説明されているようなカスタム マッチャーです: http://java.dzone.com/articles/testing-custom-exceptions

したがって、次のようなものが必要になります。

import org.hamcrest.Description;
import org.junit.internal.matchers.TypeSafeMatcher;

public class UniformInterfaceExceptionMatcher extends TypeSafeMatcher<UniformInterfaceException> {

public static UniformInterfaceExceptionMatcher hasStatus(int status) {
    return new UniformInterfaceExceptionMatcher(status);
}

private int actualStatus, expectedStatus;

private UniformInterfaceExceptionMatcher(int expectedStatus) {
    this.expectedStatus = expectedStatus;
}

@Override
public boolean matchesSafely(final UniformInterfaceException exception) {
    actualStatus = exception.getResponse().getStatus();
    return expectedStatus == actualStatus;
}

@Override
public void describeTo(Description description) {
    description.appendValue(actualStatus)
            .appendText(" was found instead of ")
            .appendValue(expectedStatus);
}

}

次に、テストコードで:

@Test
public void someMethodThatThrowsCustomException() {
    expectedException.expect(UniformInterfaceException.class);
    expectedException.expect(UniformInterfaceExceptionMatcher.hasStatus(404));

    ....
}
于 2014-03-18T21:23:30.193 に答える