当你期望目标方法抛出异常时,这就是你编写测试的方法。
@Test(expected = myExpectedException.class)
public void Test()
{
}
如果方法没有抛出异常,那该怎么办?那有属性吗?
答案 0 :(得分:3)
如果从测试方法中抛出异常,则认为测试处于ERROR状态,并且不计入PASSED测试。 换句话说 - 您不需要任何特殊处理。只需调用您要测试的方法即可。
如果您想明确不允许例外,可以在测试中添加ExpectedException
规则:
public class MyClassTest {
// The class under test
// Initialized here instead of in a @Before method for brevity
private MyClass underTest = new MyClass();
// Not really needed, just makes things more explicit
@Rule
public ExpectedException noExceptionAllowed = ExpectedException.none();
@Test
public void testSomeMethod() throws SomeException {
// If an exception is thrown, the test errors out, and doesn't pass
myClass.someMethod();
}
}
答案 1 :(得分:1)
不抛出异常并且同时不期待它始终是成功的 但是,如果您明确希望您的测试告诉Spec该方法可能会抛出异常而不是这次您可能会使用类似的东西
(在我的档案中找到此代码。我记得从互联网上引用它)
class MyAssertionRules {
public static void assertDoesNotThrow(FailableAction action) {
try {
action.run();
} catch (Exception ex) {
throw new Error("Unexpected Exception Thrown", ex);
}
}
}
@FunctionalInterface
interface FailableAction {
void run() throws Exception;
}
然后你可以像这样运行你的测试
public void testMethodUnderTest() {
MyAssertionRules.assertDoesNotThrow(serviceUnderTest::methodUnderTest);
}