Java JUnit测试扫描文件夹类

Java JUnit测试扫描文件夹类,java,unit-testing,junit,mkdir,Java,Unit Testing,Junit,Mkdir,我想写几个测试,但从较高的层次来看,每个测试都应该用一些文件填充目录结构。我至少会测试这些案例中的每一个: 包含通过筛选的文件的单个文件夹。 包含未通过筛选的文件的单个文件夹。 每个文件夹中都有一个文件的嵌套文件夹 代码: class FolderScan implements Runnable { private String path; private BlockingQueue<File> queue; private CountDownLatch l

我想写几个测试,但从较高的层次来看,每个测试都应该用一些文件填充目录结构。我至少会测试这些案例中的每一个:

包含通过筛选的文件的单个文件夹。
包含未通过筛选的文件的单个文件夹。
每个文件夹中都有一个文件的嵌套文件夹

代码:

class FolderScan implements Runnable {

    private String path;
    private BlockingQueue<File> queue;
    private CountDownLatch latch;
    private File endOfWorkFile;
    private List<Checker> checkers;

    FolderScan(String path, BlockingQueue<File> queue, CountDownLatch latch,
            File endOfWorkFile) {
        this.path = path;
        this.queue = queue;
        this.latch = latch;
        this.endOfWorkFile = endOfWorkFile;
        checkers = new ArrayList<Checker>(Arrays.asList(new ExtentionsCheker(),
                new ProbeContentTypeCheker(), new CharsetDetector()));
    }

    public FolderScan() {
    }

    @Override
    public void run() {
        findFiles(path);
        queue.add(endOfWorkFile);
        latch.countDown();
    }

    private void findFiles(String path) {
        boolean checksPassed = true;
        File root;

        try {
            root = new File(path);
            File[] list = root.listFiles();
            for (File currentFile : list) {
                if (currentFile.isDirectory()) {
                    findFiles(currentFile.getAbsolutePath());
                } else {
                    for (Checker currentChecker : checkers) {
                        if (!currentChecker.check(currentFile)) {
                            checksPassed = false;
                            break;
                        }
                    }

                    if (checksPassed)
                        queue.put(currentFile);
                }
            }
        } catch (InterruptedException | RuntimeException e) {
            System.out.println("Wrong input !!!");
            e.printStackTrace();
        }
    }
}
class FolderScan实现可运行{
私有字符串路径;
私有阻塞队列;
私人倒计时闩锁;
私有文件endOfWorkFile;
私人清单核对;
FolderScan(字符串路径、阻塞队列、倒计时闩锁、,
文件endOfWorkFile){
this.path=path;
this.queue=队列;
this.latch=闩锁;
this.endOfWorkFile=endOfWorkFile;
checkers=newarraylist(Arrays.asList(new extensionscheker()),
新ProbeContentTypeChecker(),新CharsetDetector());
}
公共文件夹扫描(){
}
@凌驾
公开募捐{
FindFile(路径);
添加(endOfWorkFile);
倒计时();
}
专用void find文件(字符串路径){
布尔值checksPassed=true;
文件根目录;
试一试{
root=新文件(路径);
File[]list=root.listFiles();
用于(文件当前文件:列表){
if(currentFile.isDirectory()){
FindFile(currentFile.getAbsolutePath());
}否则{
用于(当前检查程序:检查程序){
如果(!currentChecker.check(currentFile)){
checksPassed=false;
打破
}
}
如果(已选中)
put(当前文件);
}
}
}捕获(中断异常|运行时异常e){
System.out.println(“输入错误!!!”;
e、 printStackTrace();
}
}
}
问题:

  • 如何在每个文件夹中创建文件
  • 证明队列包含 您期望的文件对象是什么
  • 队列中的最后一个元素是 “触发器”文件
如何在每个文件夹中创建文件

  • 提取文件IO并使用模拟存储库进行测试。这意味着您将在其他地方使用IO,并且可能希望使用下面的来测试它
  • 使用的临时文件夹与您创建的文件以匹配测试的测试文件夹
证明队列包含您期望的文件对象

.equals对文件对象很有效,我相信

包含未通过筛选的文件的单个文件夹

我会通过拦截器,这样我就可以通过“总是通过”和“总是失败”拦截器

如何在每个文件夹中创建文件

  • 提取文件IO并使用模拟存储库进行测试。这意味着您将在其他地方使用IO,并且可能希望使用下面的来测试它
  • 使用的临时文件夹与您创建的文件以匹配测试的测试文件夹
证明队列包含您期望的文件对象

.equals对文件对象很有效,我相信

包含未通过筛选的文件的单个文件夹

我会通过拦截器,这样我就可以通过“总是通过”和“总是失败”拦截器


新建AllwaysPassesBlocker(),
是什么意思?这是类型
预期的
?它意味着您将“拦截器”传递给一个新的构造函数,并创建一个始终传递的新“拦截器”。应为阻止队列。您可以写入吗?因为我没有抓到。对不起,是“检查者”而不是“拦截器”。创建一个新的ctor,该ctor包含一个“checker”列表。编写只返回true的新检查程序。此构造函数是否添加到
FolderScan
?对。
newallwaysPassesblocker(),
的意思是什么?这是类型
预期的
?它意味着您将“拦截器”传递给一个新的构造函数,并创建一个始终传递的新“拦截器”。应为阻止队列。您可以写入吗?因为我没有抓到。对不起,是“检查者”而不是“拦截器”。创建一个新的ctor,该ctor包含一个“checker”列表。编写只返回true的新检查程序。此构造函数是否添加到
FolderScan
?正确的。
public class TestFolderScan {
        @Rule
        public TemporaryFolder folder= new TemporaryFolder();

        @Test
        public void whenASingleFolderWithAFileThatPassesTheFilterThenItExistsInTheQueue() {
                File expectedFile = folder.newFile("file.txt");
                File endOfWorkFile = new File("EOW");
                Queue queue = ...;
                FolderScan subject = new FolderScan(folder.getRoot(), queue, new AllwaysPassesBlocker(),...);

                subject.run();

                expected = new Queue(expectedFile, endOfWorkFile);
                assertEquals(queue, expected);
        }
}