检查目录

时间:2016-06-15 08:49:58

标签: java unit-testing

背景

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

问题

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

源代码

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;
}

1 个答案:

答案 0 :(得分:1)

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

首先,列出具有FileFilter

的子目录

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

由于您的分配平均,最大出现次数不能超过min + 1.

检查每个子文件夹中的文件数是否在此范围内(或者在这种特殊情况下,简单地等于min或max)。

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

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);

}