如何将临时文件夹传递给以File为参数的方法(JUNIT)



我有一个以File为参数的方法,我想使用@Rules temporaryFolder 对其进行junit测试

这是我的方法:

public void processFiles(final File folder)
{

File[] fileNames = folder.listFiles();
List<String> lines = new ArrayList<>();
boolean isFirstFile = true;
try
{
for (File file : fileNames)
{
List<String> list = readContent(file);
list.forEach(i -> lines.add(i));

}
}catch (IOException e)
{
e.printStackTrace();
}
}

以下是我想要测试的方法:

@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void test() throws IOException {

final File tempFile = temporaryFolder.newFile("tempFile.txt");
final File tempFile2 = temporaryFolder.newFile("tempFile.txt");

FileUtils.writeStringToFile(tempFile, "content1", "ISO-8859-1");

FileUtils.writeStringToFile(tempFile2, "content2", "ISO-8859-1");


//Here I get an error because the parameter should be of type File and not TemporaryFolder 
listFilesService.processFiles (temporaryFolder);

}

你能帮我如何正确编码吗提前感谢

您应该使用TemporaryFolder.getRoot((方法。然后,你的测试将是:

@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void test() throws IOException {
final File tempFile = temporaryFolder.newFile("tempFile.txt");
final File tempFile2 = temporaryFolder.newFile("tempFile2.txt");

FileUtils.writeStringToFile(tempFile, "content1", "ISO-8859-1");
FileUtils.writeStringToFile(tempFile2, "content2", "ISO-8859-1");

// Pass the root of the TemporaryFolder which is of type File
processFiles(temporaryFolder.getRoot());
}

这可以通过在processFilesfor循环内添加System.out.println(file.getName());来验证为工作。上述测试的输出为:

tempFile.txt
tempFile2.txt

最新更新