Java单元测试Java NIO文件库?

3

假设我有一个方法:

public void copyAndMoveFiles() throws IOException {
    Path source = Paths.get(path1);
    Path target = Paths.get(path2);
    if (Files.notExists(target) && target != null) {
        Files.createDirectories(Paths.get(target.toString()));
    }
    for (String fileInDirectory: Files.readAllLines(source.resolve(fileToRead))) {
        Files.copy(source.resolve(fileInDirectory), target.resolve(fileInDirectory), StandardCopyOption.REPLACE_EXISTING);          
    }
}

我该如何对此进行单元测试?我尝试过使用Mockito,但它没有返回任何结果或我可以断言的内容。我了解了JimFs,但出于某些原因,我无法理解它。

1个回答

2
我认为嘲笑不是正确的做法。由于您的代码读写文件,因此需要文件系统,并且需要在测试结束时断言其状态。
我会为源目录和目标目录创建临时目录(例如,使用JUnit的TempDir)。然后,您可以在源目录中设置各种测试用例(例如,它为空、一个文件、嵌套目录等),并在测试结束时使用java.io功能来断言文件已正确复制。
编辑:
概念的stub-by示例:
class MyFileUtilsTest {
    @TempDir
    File src;
    @TempDir
    File dest;

    MyFileUtils utils;

    @BeforeEach
    void setUp() {
        utils = new MyFileUtils();
    }

    @Test
    void copyAndMoveFiles() throws IOException {
        // Create a file under src, initialize the utils with src and dest
        File srcFile = File.createTempFile("myprefix", "mysuffix", src);

        utils.copyAndMoveFiles();

        File destFile = new File(dest, srcFile.getName());
        assertTrue(destFile.exists());
    }
}

那么我需要调用这个方法来移动临时文件系统吗?我只是想知道在测试结束时断言状态到底意味着什么。 - stackerstack
例如:创建文件 /tmp/src/file1.txt 和一个空目录 /tmp/dest,使用此方法复制文件,并断言 /tmp/dest/file1.txt 存在。 - Mureinik
你能否提供一段使用JUnit的TempDir演示此功能的代码片段?我不理解文档。 - stackerstack
我看到了,这里的“myprefix”和“mysuffix”是什么意思? - stackerstack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接