我需要创建一个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);
但我认为这一切都是可能的。
答案 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());
但显然你不能在那些模拟中存根任何方法等等。所以根据你想做的事情,你原来的方法可能会更有用。