我写了一个Junit测试来对我的代码进行单元测试。当我的代码中出现任何异常时,我希望我的Junit测试用例失败。我尝试使用assert语句,但即使我的代码中出现异常,我的Junit测试用例也正在通过。请有人能告诉我如何实现这一目标吗?感谢。
答案 0 :(得分:13)
我强烈建议您必须仅测试您的功能。如果抛出异常,测试将自动失败。如果没有抛出异常,您的测试将全部变为绿色。
但是,如果您仍然希望编写在异常情况下应该失败的测试代码,请执行以下操作: -
@Test
public void foo(){
try{
//execute code that you expect not to throw Exceptions.
}
catch(Exception e){
fail("Should not have thrown any exception");
}
}
答案 1 :(得分:5)
Actually your test should fail when an exception in code is thrown. Of course, if you catch this exception and do not throw it (or any other exception) further, test won't know about it. In this case you need to check the result of method execution. Example test:
@Test
public void test(){
testClass.test();
}
Method that will fail the test:
public void test(){
throw new RuntimeException();
}
Method that will not fail the test
public void test(){
try{
throw new RuntimeException();
} catch(Exception e){
//log
}
}
答案 2 :(得分:1)
您可以声明全局变量“excepted”= null或类似的东西,并将其初始化为等于catch块中的某些信息字符串。
答案 3 :(得分:1)
如果没有进一步编码,以下测试都将失败:
@Test
public void fail1() {
throw new NullPointerException("Will fail");
}
@Test
public void fail2() throw IOException {
throw new IOException("Will fail");
}
答案 4 :(得分:0)
在JUnit 4中,您可以使用expected
批注的@Test
属性来明确断言@Test应该在给定的异常下失败:
@Test(expected = NullPointerException.class)
public void expectNPE {
String s = null;
s.toString();
}
答案 5 :(得分:0)
使用: assert 或 Assert.assertTrue 最后随心所欲