文件系统的Java与Junit集成测试

文件系统的Java与Junit集成测试,java,junit,integration-testing,spring-test,Java,Junit,Integration Testing,Spring Test,我有这门课: public class FooFileRepo { @Override public File getDirectory(String directoryPath) { ... File directory = new File(directoryPath); ... return directory; } @Override public void mkdirs(File f) { ... f.getParentFi

我有这门课:

public class FooFileRepo {

@Override
public File getDirectory(String directoryPath) {
    ...     
    File directory = new File(directoryPath);
    ...
    return directory;
}

@Override
public void mkdirs(File f) {
    ...
    f.getParentFile().mkdirs();
}

public void writeFile(String path, String content) throws FileNotFoundException, UnsupportedEncodingException{
    ...
    try (PrintWriter writer = new PrintWriter(path, "UTF-8");) {
        writer.println(content);
    }
}   
}

如何模拟文件系统操作来编写此类的单元测试


谢谢。

使用PowerMock

       @RunWith(PowerMockRunner.class)
       @PrepareForTest({ Printwriter.class })
       public class SampleTestClass {

        @Mock
        private PrintWriter mockPrintWriter;

        @Before
        public void init() throws Exception {
          PowerMockito.mockStatic(FileUtils.class);
        }

        @Test
        public void test() throws IOException {
        }   
       }

对于这样一个简单的测试,最好使用真正的文件系统。作为替代方案,您可以构建一个facade-to-file操作,并轻松地模拟这个facade


同时阅读以下答案:

让文件指向测试资源目录中的某个内容否,因为我还必须测试写入文件操作。因此,请使用build/target目录进行测试,并在测试后清理此目录
public static class HasTempFolder {
@Rule
public TemporaryFolder folder= new TemporaryFolder();

@Test
public void testUsingTempFolder() throws IOException {
  File createdFile= folder.newFile("myfile.txt");
  File createdFolder= folder.newFolder("subfolder");
  // ...
 }
}