gpt4 book ai didi

java - 我如何使用 JUnit 的 ExpectedException 检查仅在子异常上的状态?

转载 作者:行者123 更新时间:2023-11-30 08:25:01 25 4
gpt4 key购买 nike

我正在尝试重构这个不使用 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 中。我确实看到 ExpectedException 有一个 expect采用 hamcrest Matcher 的方法。也许这就是关键,但我不确定如何使用它。

如果该状态仅存在于具体异常中,我如何断言异常处于我想要的状态?

最佳答案

“最佳”方式是使用自定义匹配器,如下所述: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));

....
}

关于java - 我如何使用 JUnit 的 ExpectedException 检查仅在子异常上的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com