如何在Java中创建虚拟文件列表?

时间:2014-12-31 10:23:10

标签: java list junit mockito dummy-data

我需要创建一个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);

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

3 个答案:

答案 0 :(得分:3)

我建议不要嘲笑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)

答案 1 :(得分:0)

是的,您可以在一行中完成:

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

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

答案 2 :(得分:0)

如果您只想创建任意文件,那么您可以执行以下操作:

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

但显然你不能在那些模拟中存根任何方法等等。所以根据你想做的事情,你原来的方法可能会更有用。