为什么我的JUnit测试文件的存在不起作用?

时间:2017-01-11 14:54:28

标签: java file junit

 @Test
    public void createFileTest() throws Exception {
        File file = new File("somefile.txt");
        boolean expectedResult = true;
        boolean actualResult = false;
        if (file.exists()){
            actualResult = true;
        }
        assertEquals(expectedResult, actualResult);
    }

我有一个创建或重写Json文件的方法。 我现在编写的测试方法无法确定文件是否存在,尽管文件在目录中可见。

如何正确实现file.exists(),或者什么是可行的替代方案?

2 个答案:

答案 0 :(得分:0)

当我自己测试时,功能似乎正如我所期望的那样工作。

如果somefile.txt不存在,那么测试应该失败,但如果确实存在则测试通过。

只是为了清楚构造函数和.exists()的作用:

File file = new File("somefile.txt");

这只是创建一个新的File实例,一个抽象的路径名而不是一个实际的文件。

file.exists()

最好用javadoc:

  

测试此抽象路径名表示的文件或目录   存在。

如果此测试仍然失败,我建议添加

file.getAbsoluteFile()

这将返回此文件存在的绝对路径的字符串。

答案 1 :(得分:0)

您的问题不是关于UnitTesting,而是关于如何使用Java访问文件。

您获取文件的方式:

File file = new File("somefile.txt");

文件必须位于文件系统的同一文件夹中,因为Java源文件包含测试。

仅供记录:

UnitTests不访问文件系统(或任何其他昂贵的资源)。

在UnitTest中,你使用像Mockito,JMock(-it)等类似的模拟框架来模拟这些资源(或使用它们的类)。

此外,你测试第三方课程(如java.io.File)。您测试您的类,以及它们如何与此依赖关系进行通信:

@Test
public void writeTo_FileNotExisting_CreatesTheFile(){
   // arrange
   File targetFile = mock(File.class);
   when(targetFile.exists()).thenReturn(false);

   // act
   new YourJsonWriter().writeTo(targetFile);

   // assert
   verify(targetFile).createNewFile();
}