如何在模拟文件路径时编写有效的JUnit测试?

时间:2016-07-19 10:28:45

标签: java unit-testing junit mocking mockito

我正在尝试为一组在Web上使用一些REST服务的方法编写一些JUnit测试。

一般来说,在我的方法中,我提供了一个文件路径和一个配置作为参数,但我希望随着我的进展,事情会变得更加复杂。

目前,我最好的方法是为以下类似的方式编写JUnit测试:

public Answers changeFileToAnswer(String filePath, String mediaType) {
    File document = new File(filePath);
    Answers answers = restService.changeFileToAnswer(document, mediaType);
    return answers;
}

我可以为这样一个简单的类写什么样的单元测试?测试答案对象将是一个集成测试,因为在这里进行外部调用,对吗?这里的好习惯是什么?有没有办法模拟作为参数传入的文件路径?

备注 - 此方法来自REST接口,稍后将通过GUI公开。我目前正在使用POSTman的POST调用进行测试。因此,我传入的是filePath的字符串而不是文件对象(因为我无法将其发布到我的服务器上)。

感谢。

1 个答案:

答案 0 :(得分:0)

无需进行集成测试。你的restService需要嘲笑或伪造,所以没有真正的外部呼叫。 对于模拟filePath,您可以使用JUnit TemporaryFolder

public class TestClass{
    @Rule
    private TemporaryFolder folder = new TemporaryFolder();

    @Test
    public void testMethod(){
        File tempFile = folder.newFile("myfile.txt");
        classUnderTest.changeFileToAnswer(file.getPath(), mediaType);
    }
}

此规则将在文件系统中创建一个真实文件,当测试完成执行时将删除该文件。