【问题标题】:How to create a list of dummy files in Java?如何在 Java 中创建虚拟文件列表?
【发布时间】:2015-02-27 11:04:57
【问题描述】:

我需要创建一个List<File> files,以便它包含 3 个虚拟文件。我该怎么做?

我需要它来进行单元测试。

我做到了

private File file1 = mock(File.class);
private File file2 = mock(File.class);
private File file3 = mock(File.class);

List<File> files = Lists.newArrayList(file1, file2, file3);

但我认为这一切都是可能的。

【问题讨论】:

  • 为什么有人会否决这个,太简单的问题会被否决吗?这个问题很具体,我看不出有什么理由不赞成。
  • 我没有投反对票,但表现出不努力是反对票的原因,你应该先努力。
  • 你可以这样做: List files = Lists.newArrayList( mock(File.class), mock(File.class), mock(File.class) );

标签: java list junit mockito dummy-data


【解决方案1】:

我建议不要模拟 File 而是制作虚假值。作用于File 实例的方法往往关心文件路径和/或文件是否存在,因此最直接的方法是使用真实实例。

这是一个使用 JUnit4 的示例,它创建了一个包含三个 File 实例的列表来引用目录中不存在的文件:

@RunWith(JUnit4.class)
public class ExampleTest {
  @Rule
  public TemporaryFolder testFolder = new TemporaryFolder();

  private final Foo foo = new Foo();

  @Test
  public void shouldFailIfFilesDoNotExist() {
    List<File> files = Lists.newArrayList(
        testFolder.newFile(),
        testFolder.newFile(),
        testFolder.newFile());
    foo.doIt(files);
  }
}

如果您关心文件名,可以将文件名传递给TemporaryFolder.newFile(String)

【讨论】:

    【解决方案2】:

    是的,你可以一行完成:

    List<File> files = Lists.newArrayList( mock(File.class), mock(File.class), mock(File.class) ); 
    

    但我不确定这是一个好的解决方案。 java.io.File 是不可变的,所以它毫无用处。如果您没有实际文件的路径,我建议您使用 null(即使文件本身不存在)

    【讨论】:

      【解决方案3】:

      如果你只想创建任意文件,那么你可以这样做:

      final List<File> files = Stream.generate(() -> mock(File.class)).limit(3).collect(toList());
      

      但显然你不能在这些模拟等上存根任何方法。所以根据你想要做什么,你原来的方法可能更有用。

      【讨论】:

        猜你喜欢
        • 2011-01-06
        • 2016-09-29
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        • 1970-01-01
        相关资源
        最近更新 更多