【发布时间】:2017-04-16 13:29:34
【问题描述】:
我有以下课程:
public class MyClassTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void testMyMethod() throws Exception {
// Test 1
String[] args = ...;
MyClass.myMethod(args);
// Test 2
thrown.expect(InvalidParamException.class);
thrown.expectMessage("exceptionString 1");
args = ...;
MyClass.myMethod(args);
// test 3
thrown.expect(InvalidParamException.class);
thrown.expectMessage("exceptionString 2");
args = ...;
MyClass.myMethod(args);
}
问题是测试 2 中的 expectMessage 是假的,为了便于讨论,实际预期的消息是 exceptionString 3,但测试并没有失败,尽管预期的消息与实际的消息不同。 它变得更奇怪了——如果我向 expectMessage 提供诸如“fdsfsdfsdfsdfsdfsdthe”之类的乱码消息——那么测试确实失败了:
java.lang.AssertionError: 预期:(InvalidParamException 和异常的实例,消息包含“fdsfsdfsdfsdfsdfsdthe”的字符串) 但是:消息异常包含“fdsfsdfsdfsdfsdfsdthe”消息的字符串是“exceptionMessage3”
这是预期的行为 - 但是当我稍微更改 exceptionMessage3 时,一个或两个字母,甚至发送一个空字符串 - 测试根本不会失败。
我错过了什么吗?
【问题讨论】:
-
ExpectedException仅包含 1 个预期异常。你不能像这样重复使用它。
标签: java exception junit java-8