如何解决如何为DirectoryStream编写JUnit测试
我在名为Test.java的类中具有此功能,并且会包含该功能;
public List<Path> getAllFoldersInTmp(String directory) throws IOException {
final List<Path> files = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(Path.of(directory))) {
for (Path entry : stream) {
if (Files.isDirectory(entry)) {
files.add(entry);
}
}
}
return files;
}
因此,基本上,它以“ ../../tmp”路径中的列表形式返回所有文件夹。我想为此编写一个测试,这是我的工作方式,但不起作用:
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import org.junit.jupiter.api.Test;
class Testing{
@Autowired
Test test;
@TempDir
Path directory;
@Test
public void givendir_whenUsingDirectoryStream_thenListAllFiles() throws IOException {
File fileOne = directory.resolve("file1").toFile();
File fileTwo = directory.resolve("file2").toFile();
System.out.println(test.getAllFoldersInTmp("../../Temp")); //since the fileone and fileTwo are stored in `Temp/someRandomNumber` directory
}
}
我遇到以下错误;
..\..\Temp
java.nio.file.NoSuchFileException: ..\..\Temp
解决方法
使用@TempDir
时,您可以随意不使用某些特定的硬编码路径(例如,摘录中的"../../Temp"
)。
基本上,junit
将自动为您创建临时目录。然后在测试中,您可以按照自己想要的方式进行操作,例如创建文件和目录。
如果需要获取临时目录路径的值,则只需在带有toString()
注释的字段上调用@TempDir
。
例如,对于您的特定情况,可以编写以下测试:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
class FoldersResolverTest {
@TempDir
Path directory;
// assume FoldersResolver wrapps getAllFoldersInTmp
FoldersResolver foldersResolver = new FoldersResolver();
@Test
void directoriesAreFoundAndFilesAreSkipped() throws IOException {
Path fileOne = directory.resolve("file1");
Path fileTwo = directory.resolve("file2");
Path directoryOne = directory.resolve("directory1");
Path directoryTwo = directory.resolve("directory2");
Files.createFile(fileOne);
Files.createFile(fileTwo);
Files.createDirectory(directoryOne);
Files.createDirectory(directoryTwo);
// note directory.toString() returns path to the temporary folder created by junit
List<Path> actual = foldersResolver.getAllFoldersInTmp(directory.toString());
List<Path> expected = List.of(directoryOne.getFileName(),directoryTwo.getFileName());
assertEquals(expected,actual);
}
}
注意:通常,@TempDir
使用默认系统临时文件导演 y。这取决于操作系统,通常可以通过环境变量找到。例如,我系统上的TMPDIR
指向/tmp
目录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。