我需要编写一个JUnit测试用例,它将测试一个传递不同排列的函数,并得到相应的结果。
成功的用例不返回任何内容,而失败的排列会抛出异常(异常类型无关紧要)。
例如。 testAppleisSweetAndRed(水果,颜色,味道)
测试将调用以下内容 -
testAppleisSweetAndRed(orange,red,sweet)//throws exception
testAppleisSweetAndRed(apple,green,sweet)//throws exception
testAppleisSweetAndRed(apple,red,sour)//throws exception
testAppleisSweetAndRed(apple,red,sweet)//OK
如果调用的行为符合预期,则测试成功 断言如何捕获前3次调用以确保它们确实引发预期的异常?
答案 0 :(得分:6)
如果您使用的是JUnit 4或更高版本,则可以按照以下方式执行此操作。
可以使用@Rule
public ExpectedException exceptions = ExpectedException.none();
这提供了许多可用于改进JUnit测试的功能。
如果您看到以下示例,我正在测试异常中的3件事。
public class MyTest {
@Rule
public ExpectedException exceptions = ExpectedException.none();
ClassUnderTest testClass;
@Before
public void setUp() throws Exception {
testClass = new ClassUnderTest();
}
@Test
public void testAppleisSweetAndRed() throws Exception {
exceptions.expect(Exception.class);
exceptions.expectMessage("this is the exception message");
exceptions.expectCause(Matchers.<Throwable>equalTo(exceptionCause));
testClass.appleisSweetAndRed(orange,red,sweet);
}
}
答案 1 :(得分:5)
告诉您的测试方法您期望形成测试方法的异常类型。你只需要写下面的语法。
@Test(expected = Exception.class)
这意味着我期待从测试中抛出异常。您可以使用其他异常,例如ArrayOutOfBound等。
答案 2 :(得分:0)
我认为expected
不够或不够的标准方法是在测试类中使用辅助方法,如:
private static void testAppleIsSweetAndRedThrowsException(Fruit fruit, Colour colour, Taste taste) {
try {
testAppleisSweetAndRed(fruit, colour, taste);
fail("Exception expected from " + fruit + ", " + colour + ", " + taste);
} catch (Exception e) {
// fine, as expected
}
}
现在在你的测试中你可以写:
testAppleIsSweetAndRedThrowsException(orange, red, sweet);
testAppleIsSweetAndRedThrowsException(apple, green, sweet);
testAppleIsSweetAndRedThrowsException(apple, red, sour);