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

标签 java unit-testing junit mocking mockito

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

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

目前,对我来说编写 JUnit 测试的最佳方法是什么:

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

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

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

谢谢。

最佳答案

集成不需要测试。您的 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);
    }
}

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

UPD:您可能还想查看jimfs

关于java - 在模拟文件路径时如何编写有效的 JUnit 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455941/

相关文章:

java - 类的架构和最佳实践?

java - 如何通过 System.err 的单元测试?

java - 是否可以在java流中使用when()初始化模拟

java - 获取特定键的循环占位符引用错误

java - 我应该将 log4j2.xml 放在 WAR 文件中的什么位置?

CSS 特异性测试

c# - 如何对执行异步方法的 RelayCommand 进行单元测试?

database - 需要上下文的 Android 单元测试

java - 如何在不将方法设为静态的情况下使用@Enclosed

java - JNA:如何使用 CreateProcess 在 64 位系统中执行 32 位版本的系统 native 应用程序?