我有以下课程:
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只是一点点,一两个字母,甚至发送一个空字符串时 - 测试根本不会失败。
我错过了什么吗?
答案 0 :(得分:5)
ExpectedException
只能容纳1个预期的例外。
你不能像这样重用它。之一:
ExpectedException
个实例; try
/ catch
; assertThrows
(或expectThrows
)。