3

我一直在谷歌搜索,但没有找到适合我具体情况的答案。

我正在研究一个项目文件管理器类,并发现它被开发为在 Windows 和 Unix 文件系统上表现不同。

更具体地说,它补偿了 Unix 中的大小写敏感性:当找不到文件时,管理器将以不区分大小写的方式查找它。

在更改此代码之前,我想实现一些单元测试。但是,我们的开发机器和 CIP 都在 Windows 上,而我没有可用的 Unix 机器。机器和 IDE 由客户提供。虚拟化不是一种选择,双引导更是少之又少。

有没有办法在构建平台独立的同时测试 Windows 和 Unix 模式?我认为理想的方式是以一种模式运行整个测试类,然后在另一种模式下运行,但即使是更实际的解决方案也会很棒。

在生产模式下,文件管理器使用 Spring 初始化,但它们是链的最底层,直接使用 java.io。

版本:Java 6、JUnit 4.9

4

3 回答 3

1

您可以通过使用 wubi 安装它来轻松地双启动 Ubuntu。

我了解到单元测试不应该出于不同的原因访问文件系统(速度是其中之一)。

对于 Java 6,请查看这些:http: //docs.oracle.com/javase/6/docs/api/javax/tools/JavaFileManager.html http://docs.oracle.com/javase/6/docs/api/ javax/swing/filechooser/FileSystemView.html

如果您要使用 Java 7,这可能会对您有所帮助:http: //download.oracle.com/javase/7/docs/technotes/guides/io/fsp/filesystemprovider.html

于 2013-07-04T07:59:28.700 回答
1

您可以使用具有依赖关系的Jimfs

<dependency>
    <groupId>com.google.jimfs</groupId>
    <artifactId>jimfs</artifactId>
    <version>1.1</version>
</dependency>

然后你可以使用创建一个 linux、windows 和 Mac 文件系统

 FileSystem fileSystem = Jimfs.newFileSystem(Configuration.osX());
 FileSystem fileSystem = Jimfs.newFileSystem(Configuration.windows());
 FileSystem fileSystem = Jimfs.newFileSystem(Configuration.unix());

例子

class FilePathReader {

    String getSystemPath(Path path) {
        try {
            return path
              .toRealPath()
              .toString();
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }
}

class FilePathReaderUnitTest {

    private static String DIRECTORY_NAME = "baeldung";

    private FilePathReader filePathReader = new FilePathReader();

    @Test
    @DisplayName("Should get path on windows")
    void givenWindowsSystem_shouldGetPath_thenReturnWindowsPath() throws Exception {
        FileSystem fileSystem = Jimfs.newFileSystem(Configuration.windows());
        Path path = getPathToFile(fileSystem);

        String stringPath = filePathReader.getSystemPath(path);

        assertEquals("C:\\work\\" + DIRECTORY_NAME, stringPath);
    }

    @Test
    @DisplayName("Should get path on unix")
    void givenUnixSystem_shouldGetPath_thenReturnUnixPath() throws Exception {
        FileSystem fileSystem = Jimfs.newFileSystem(Configuration.unix());
        Path path = getPathToFile(fileSystem);

        String stringPath = filePathReader.getSystemPath(path);

        assertEquals("/work/" + DIRECTORY_NAME, stringPath);
    }

    private Path getPathToFile(FileSystem fileSystem) throws Exception {
        Path path = fileSystem.getPath(DIRECTORY_NAME);
        Files.createDirectory(path);

        return path;
    }
}

这一切都是从Baeldung抄来的。

于 2021-10-26T20:32:31.993 回答
0

您可以使用虚拟机在 unix 上对其进行测试。Oracle 的 Virtual Box 是一个很好的虚拟化软件。安装 Ubuntu、Fedora 或其他一些基于 unix 的操作系统的磁盘映像。将文件传输到 VM。您可以直接从源代码管理中签出到 VM 中,您应该一切顺利。至少我假设这是您想要做的:在 windows 和 linux 中测试您的软件,但目前没有 linux 可供您使用

于 2013-07-04T10:15:08.790 回答