2011-05-20 53 views
8

我已经实现了两个静态void创建文件和读取文件的方法。 我想测试这些方法,但我不知道如何测试使用文件的方法。 这样做的最好方法是什么?如何单元测试创​​建和读取文件的方法

我正在使用Java和JUnit。

+0

可能重复[如何单元测试将文件保存到磁盘?](http://stackoverflow.com/questions/3381801/how-do-i-unit-test-saving-file-to-the - 磁盘)另一个将[单元测试文件I/O方法](http://stackoverflow.com/questions/3451870) – Gishu 2011-05-23 06:40:43

+0

这是2个密切相关的问题。对于witing案例,请参阅http://stackoverflow.com/questions/3381801/how-do-i-unit-test-saving-file-to-the-disk – Raedwald 2014-07-05 11:16:40

回答

3

您可以创建一个测试/资源目录,其中包含专门用于测试的文件。这样做的缺点是你的代码需要能够传入路径,即使代码不是这样设计的,也不应该是一个障碍。

所以在您的测试,你将不得不像

public void testUtilWrite() { 
    YourUtil.writeFile(path, data); //whatever you have 

    File shouldExist = new File(path); 
    assertTrue(file.exists()); 
    // now read the file and assert the data in it is correct 
} 

一件事要记住的是,如果你使用绝对路径不同的开发人员可能需要的资源不同的路径,所以你可能需要使用配置files ...

+0

谢谢。但我怎样才能确定文件是创建或读取? – djihad 2011-05-20 16:34:09

13

最好的办法是重构你的方法来处理输入/输出流而不是直接使用文件。通过这种方式,您可以在单元测试中轻松地将StringReaders/Writers传递给它们(只要它们与文本文件一起工作 - 如果没有,则需要适当类型的流)。

如果您直接使用文件,单元测试会变得更加复杂,因为它们需要额外的安装/拆卸代码来创建和清理测试目录,并在每个测试中加上读/写文件,这会降低测试速度。此外,它还会出现问题,例如无法在特定目录中写入(例如,因为它是在由另一个开发人员启动的测试运行中创建的),磁盘已满错误等。最好让自己的单元测试保持自我 - 尽可能包含。