我需要测试以下代码:
try{
while((testBean = csvReader.read(TestBean.class,headers,getCellProcessors()))!=null){
System.out.println("no excpetion");
i=5;
}
}catch(SuperCsvException csvExc){
System.out.println("superCSV excpetion");
i=0;
}catch(Exception ex){
System.out.println("excpetion");
i=0;
}
如何测试是否抛出SuperCsvException
。
答案 0 :(得分:4)
JUnit 4 supports this
@Test(expected=<YourExpectedException>.class)
public void testExceptionThrown() {
// call the method that throws exception
}
答案 1 :(得分:1)
&#34; new&#34; JUnit期望异常的方式是规则的方式:
public class ThisIsTheTestClass {
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void testingSomeBehaviorThatShouldThrowAnException() throws SuperCsvException {
exception.expect(SuperCsvException.class);
// Put your testing effort here (setup, call, assertions, ...).
}
}
如果有兴趣,请查看一些information about rules。
答案 2 :(得分:0)
要么是预期的,要么是预期的。如果需要,那么你需要这样的东西:
try {
doSomething();
fail("No exception thrown");
}
catch (MyException e) {
// expected
}
答案 3 :(得分:0)
JUnit 4支持此功能。您可以将单元测试声明为:
@Test(expected=SuperCsvException.class)
public void _testSuperCsvException() {
// call to function containing your code
}
答案 4 :(得分:0)
我的个人经历总是像
boolean caught = false;
try {
runCodeToThrowException();
} catch (MyException e) {
caught = true;
}
assertTrue(caught);
我不喜欢JUnit处理它的原因是我无法准确控制抛出此异常的位置和方式。如果我试图在一大段代码中捕获任何通用内容,那可能不太好,例如IllegalArgumentException
。
答案 5 :(得分:0)
您的测试方法是错误的。您应该将您正在测试的每个方法或类视为具有规范,可访问接口(非private
方法和字段)和实现的单元。您应该测试该单元在通过其可访问接口进行操作时是否符合其规范。您不应该测试该单元是否具有特定实现。您可以使用您对实现的了解来指导您选择测试用例,以选择可能被错误实现的案例。
因此,在您的情况下,可以抛出异常的事实是实现细节。你最好有一个测试用例,它也会导致抛出异常。当你的代码试图捕获异常时,我想这是因为你的方法的规范说如果csvReader
出现问题,该方法不应抛出任何异常。因此,您可以设置一个测试用例,设置csvReader
以抛出异常。如果方法抛出异常,JUnit将无法通过测试。
注意区别:测试用例不测试抛出并捕获异常(实现细节);它测试该方法在调用csvReader.read
将抛出异常的情况下不抛出或传播异常。通过禁止调用csvReader.read
来捕获异常或,允许实现满足该约束。
答案 6 :(得分:-1)
如果SuperCsvException是Exception的子类,请尝试这样的事情:
Exception ex=null;
try {
while ((testBean = csvReader.read(TestBean.class, headers, getCellProcessors())) != null) {
System.out.println("no excpetion");
i = 5;
}
} catch (SuperCsvException csvExc) {
System.out.println("superCSV excpetion");
i = 0;
ex=csvExc;
} catch (Exception ex) {
System.out.println("excpetion");
i = 0;
}
Assert.assertNotNull(ex);