0

出于某种原因,我有一个路径(//what/ever)存储在修改文件的类的私有变量中。因此,当我对其进行测试时,它会尝试修改文件,但是由于文件不存在,因此会引发异常。

当然,对于单元测试,我不想在文件系统中创建该文件。

有没有办法模拟那个文件并强制机器写入 //my/folder 而不是 //what/ever?

4

1 回答 1

0

模拟文件本身可能很困难。除非,您将文件处理抽象到您管理的某个接口中,并且可以在测试运行期间注入模拟实现。另一种方法是公开文件路径,以便您可以将其更改为测试设置代码的一部分。

还有一种方法涉及 JUnit 4。在 JUnit 4 中,您可以在测试运行中管理临时文件和文件夹。它将清理您创建的任何新文件或文件夹。

可以这样做:

public class MyFileTest {
    @Rule
    public TemporaryFolder testFolder = new TemporaryFolder();

    @Test
    public void testSomething() throws IOException {
        File tempFile = testFolder.newFile("myfile");

我认为这样的事情将允许您创建实际文件,以便您的代码可以修改它,因此不会爆炸。您可能需要从以下方面准确考虑测试的范围:

  • 你到底想测试什么?
  • 是否将正确的内容写入文件?
  • 是文件本身被修改了吗?
  • 等等

回答其中一些问题可能会让您朝着正确的方向前进,即您应该编写什么样的测试以及您可能需要进行哪些重构以促进测试要求。

于 2013-10-01T16:26:31.133 回答