AssertJ assert on Exception 覆盖了另一个 Exception
AssertJ assert on Exception covered another Exception
我是 AssertJ 的初学者。我在使用 AssertJ 进行单元测试时遇到了一些问题。
- JAVA: 版本 8
- AssertJ: 3.11.1
我有如下源代码,捕获一个异常并抛出另一个异常。
try {
Integer.valueOf(valueA);
} catch(Exception e) {
throw new XXXException("value is not valid", e);
}
我下面的测试用例失败了,我被告知错误的异常断言,有点混乱。
Throwable thrown = catchThrowable(() -> {
contract.init(ctx, "A", "100A", "B", "200");
});
assertThat(thrown).isInstanceOf(XXXException.class);
报错信息如下,看来是原来的异常被AssertJ捕获了。任何人都可以帮忙吗?这是错误还是我使用 AssertJ API 的错误?非常感谢。
java.lang.AssertionError:
Expecting:
<java.util.IllegalFormatConversionException: d != java.lang.String>
to be an instance of:
<xxxx.XXXException>
but was:
<"java.util.IllegalFormatConversionException: d != java.lang.String
这是我重现问题的尝试,测试按预期通过:
@Test
public void test() {
Throwable thrown = catchThrowable(() -> f());
assertThat(thrown).isInstanceOf(RuntimeException.class);
}
private void f() {
try {
Integer.valueOf("100A");
} catch (Exception e) {
throw new RuntimeException("value is not valid", e);
}
}
你能告诉我们 contract.init
在做什么吗?
另一种可能性是在堆栈跟踪中,如果它在某处包含一个 %d
堆栈跟踪,它可能会被 String.format
解释,但如果没有更多细节就很难说。
我是 AssertJ 的初学者。我在使用 AssertJ 进行单元测试时遇到了一些问题。
- JAVA: 版本 8
- AssertJ: 3.11.1
我有如下源代码,捕获一个异常并抛出另一个异常。
try {
Integer.valueOf(valueA);
} catch(Exception e) {
throw new XXXException("value is not valid", e);
}
我下面的测试用例失败了,我被告知错误的异常断言,有点混乱。
Throwable thrown = catchThrowable(() -> {
contract.init(ctx, "A", "100A", "B", "200");
});
assertThat(thrown).isInstanceOf(XXXException.class);
报错信息如下,看来是原来的异常被AssertJ捕获了。任何人都可以帮忙吗?这是错误还是我使用 AssertJ API 的错误?非常感谢。
java.lang.AssertionError:
Expecting:
<java.util.IllegalFormatConversionException: d != java.lang.String>
to be an instance of:
<xxxx.XXXException>
but was:
<"java.util.IllegalFormatConversionException: d != java.lang.String
这是我重现问题的尝试,测试按预期通过:
@Test
public void test() {
Throwable thrown = catchThrowable(() -> f());
assertThat(thrown).isInstanceOf(RuntimeException.class);
}
private void f() {
try {
Integer.valueOf("100A");
} catch (Exception e) {
throw new RuntimeException("value is not valid", e);
}
}
你能告诉我们 contract.init
在做什么吗?
另一种可能性是在堆栈跟踪中,如果它在某处包含一个 %d
堆栈跟踪,它可能会被 String.format
解释,但如果没有更多细节就很难说。