我有两个进程 - FileWriter和FileReader。 FileWriter有一个write()方法,如果文件丢失并写入文件,则会创建该文件。 FileReader有一个read()方法,该方法从文件读取并在文件不可用时抛出CustomException。
在正常的应用程序运行期间,首先执行FileWriter.write()方法,然后执行FileReader.read()方法。由于文件将始终存在,read()方法永远不会抛出我的CustomException,除非FileWriter出现问题。
我正在为这两个类编写junit测试用例。当两个类彼此独立测试时,我发现当文件不存在时我的自定义异常被抛出。出于一个非常复杂的原因,我希望将测试用例标记为成功并执行下一个测试。为实现这一目标,我做了以下工作:
@Test
public void testRead() throws CustomException {
boolean assumeTestcasePassed = false;
FileReader fileReader = new FileReader();
String fileContent = null;
try {
fileContent = fileReader.read();
} catch (CustomException e) {
assumeTestcasePassed = true;
}
if(assumeTestcasePassed){
assertTrue(true);
} else {
assertTrue("File is empty", fileContent != null);
}
}
有没有更好的方法来实现我在这里所做的事情?
答案 0 :(得分:1)
如果我理解正确,你会期望抛出异常,只需这样做:
@Test
public void testRead() {
try {
assertTrue(new FileReader().read() != null);
} catch (CustomException e) {
// Test passes
}
}
你也可以像这个答案一样注释:How do you assert that a certain exception is thrown in JUnit 4 tests?
答案 1 :(得分:1)
您可以预期测试代码会在@Test
注释中抛出异常:
@Test(expected = CustomException.class)
public void testRead() throws CustomException {
FileReader fileReader = new FileReader();
fileContent = fileReader.read();
}