0

我需要比较 2 个 csv 文件并使用 java 将结果输出到 Fitnesse 中的新文件。由于我是 Fitnesse 的新手,请对此有所了解。我对要使用什么固定装置感到困惑。

4

2 回答 2

2

好吧,有两种方法可以解决这个问题。一个非常充分地利用 FitNesse,另一个只是完成了工作。

选项 1:充分利用 FitNesse

假设两个 CSV 文件之一是固定的并且始终相同,您可以创建一个可以读取文件的夹具,然后将结果与 FitNesse 测试中的表格进行比较。这可能看起来像这样:

|Query:list csv data|c:\test\file_to_check.csv|
|col1       |col2       |col3     |
|Joe        |12         |red      |
|Steve      |15         |purple   |

当测试运行时,它会读入文件并将其拆分为行和列,使用标题行将值与列连接起来。然后它返回标准的 Slim(我假设它目前正在使用 Slim)行列表,这些行本身是名称、值对作为字符串的列表。如果匹配,您将看到全部为绿色。如果它们不匹配,那么您将收到指示不匹配的失败。这样的固定装置还可以识别缺失的行或额外的行,您会在页面中看到它们。

选项2:完成它

第二种选择不会像 FitNesse 那样友好,但可以工作。此版本会将所有验证推送到夹具中。在这种情况下,您将编写一个可以将两个文件名作为输入的夹具,然后在夹具代码中进行比较。然后它将返回一些失败的指示。它可能看起来像这样(但还有其他设计也可以工作:

|compare csv files|
|file1             |file2             |match?|
|c:\test_file_1.csv|c:\test_file_1.csv|true  |

这将适用于以下代码(您仍然必须完成比较 CSV 文件的困难部分):

public class CompareCsvFiles {
    
    private String filenameForFirstFile = null;
    private String filenameForSecondFile = null;
    private String matched = null;
    
    public void setFile1(String filename){
        filenameForFirstFile = filename;
    }
    
    public void setFile2(String filename){
        filenameForSecondFile = filename;
    }
    
    public String match(){
        return new CsvCompareTool(filenameForFirstFile, filenameForSecondFile).match();
    }
    
    private class CsvCompareTool{
        private String filename1 = null;
        private String filename2 = null;
        
        public CsvCompareTool(String file1, String file2){
            filename1 = file1;
            filename2 = file2;
        }
        
        public String match(){
            // create the necessary code to do the comparison here.  
            // I'll leave that to you.
            return "Not implemented yet";
        }
        
    }
    
    
}

如果出现故障,我将返回一个字符串来描述发生故障的行。

有关解析 CSV 文件的更多信息,请参阅有关 Java CSV 解析器的问题。

最后的评论

就个人而言,我更喜欢选项 1。它利用 FitNesse 进行最终验证,并向您显示页面中的特定故障。但这确实需要一个文件是一致的预期结果。

在任何一种情况下,我都会尝试找到一个使 CSV 文件处理更容易的库,因为有一些有趣的规则关于如何将事物转义为嵌入逗号。

您也许还可以使用 TableTable 样式表构建一些东西来执行此操作,但我不推荐这样做。

如果您使用的是 FitLibrary,您应该能够执行与任一示例相同的操作,但编码会有所不同。

于 2011-12-17T15:04:46.640 回答
0

FitLibrary 的 CompareFiles 夹具怎么样?

于 2012-05-17T11:42:49.993 回答