有没有办法暂时接受junit testcase成功?

时间:2017-12-19 19:25:38

标签: java junit

我有两个进程 - 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);
    }

}

有没有更好的方法来实现我在这里所做的事情?

2 个答案:

答案 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();
}