我是jUnit的新手。无法弄清楚如何测试处理的异常。
public File inputProcessor(String filePath){
File file = null;
try {
file = new File(filePath);
Scanner input = new Scanner(file);
} catch (FileNotFoundException e) {
System.out.print("Check your input file path");
e.printStackTrace();
}
return file;
}
现在,想要使用无效的文件路径进行测试,以检查是否抛出异常并正确捕获异常。我写了这个
@Test (expected = java.io.FileNotFoundException.class)
public void Input_CheckOnInvalidPath_ExceptionThrown() {
Driver driver = new Driver();
String filePath = "wrong path";
File file = driver.inputProcessor(filePath);
}
但是因为我已经发现了我的例外它不起作用。测试失败了。任何帮助都会很棒!!日Thnx
答案 0 :(得分:3)
您需要测试方法的行为,而不是测试实现细节。
如果方法的正确行为是在文件不存在时返回null
,则只需要
@Test
public void Input_CheckOnInvalidPath_ExceptionThrown() {
Driver driver = new Driver();
String filePath = "wrong path";
assertNull(driver.inputProcessor(filePath));
}
如果您的方法的正确行为是在文件不存在时将特定邮件打印到System.out
,并且您想要对其进行测试,那么您可以创建模拟PrintStream
,使用{ {1}}设置它,调用您的方法,然后测试是否正确调用了System.setOut(PrintStream)
。 Mockito可以帮助你做到这一点 - 也许吧。我认为您冒着测试PrintStream
与许多System.out.println()
被调用的实现细节的风险。 (您可能不应该测试System.out.print()
的实现方式。)
如果两者都是正确的行为,则需要同时进行检查。
答案 1 :(得分:1)
此方法所需的公开行为是System.out
和System.err
中相应行的外观。在测试代码中,您可以将System.out和System.err替换为您自己的PrintStream
。请参阅System.setOut和System.setErr。
将每个PrintStream基于例如一个StringWriter。这样,在您的测试代码中,您可以获取String,表示该方法写入每个输出流的内容(如果有的话),并对其进行测试。