java - 检查跨目录的文件分布

标签 java unit-testing

背景

我有一个应用程序在固定目录中创建多个子文件夹。它在这些目录中放置了许多文件。文件数量均匀分布在这些文件夹中。我有一个测试,检查文件夹中的固定值,因此每个文件夹中有 n 个文件。

问题

我如何测试,如果有 4 个子文件夹和 5 条消息,这 4 个子文件夹中的消息分布是 1 个文件夹中 2 条消息,另外 3 个文件夹中 1 条消息?

源代码

public boolean checkFileCountInEachFolder(int expectedCount){
    File folder = new File(AppProperties.getInstance().get("path"));
    File[] files = folder.listFiles();

    if (files != null) {
        for (int i = 0; i < files.length; i++) {
            File file = files[i];

            if (file.isDirectory()) {
                int fileCount = listFiles(file, new ArrayList<File>()).size();
                if (fileCount!=expectedCount) {
                    return false;
                }
            }
        }
    }

    return true;
}

最佳答案

有很多方法可以做到这一点,这是其中之一。

首先,使用 FileFilter 列出子目录。

将消息数(该方法的参数是消息数)除以文件夹数,以获得最少的预期出现次数(可能为 0)。

由于分布均匀,因此最大出现次数不能超过最小值 + 1。

检查每个子文件夹中的文件数量是否在此范围内(或者在本例中简单地等于最小值或最大值)。

最后,将找到的所有文件的计数相加,并将结果与​​消息总数进行比较。

public boolean checkFileCountInEachFolder(final int nbMessages) {

    File folder = new File(AppProperties.getInstance().get("path"));

    File[] subFolders = folder.listFiles(new FileFilter() {
        @Override
        public boolean accept(final File f) {
            return f.isDirectory();
        }
    });

    int nbFolders = subFolders.length;
    int minOccurences = nbMessages / nbFolders;
    int maxOccurences = minOccurences + 1;

    int totalCount = 0;

    for (int i = 0; i < subFolders.length; i++) {
        File file = subFolders[i];

        int fileCount = listFiles(file, new ArrayList<File>()).size();
        if (fileCount < minOccurences || fileCount > maxOccurences) {
            return false;
        }

        totalCount += fileCount;

    }

    return (totalCount == nbMessages);

}

关于java - 检查跨目录的文件分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830493/

相关文章:

java - 为什么 MOXy JAXB 编码为空字符串而 JAXB 引用实现却没有?

java - 尝试在 Android 上使用 Google map 时出现异常

php - 在 Laravel 4 中模拟输入门面

unit-testing - 通过gradle中的控制台运行组testng测试

c# - 在单个测试类中测试接口(interface)的多个实现

java - 对于参数类型 Constante,运算符 + 未定义

java - 如何使用 POI 从 excel 导出嵌入式文件?

java - EOF 同时寻找匹配 `"' 错误

java - TestNG - 如何断言两个列表相等而忽略顺序?

java - 如何在 JUnit 测试中重复捕获循环中的参数?