【问题标题】:file comparison in fitnesse using java使用java在fitnesse中进行文件比较
【发布时间】:2011-12-17 03:24:31
【问题描述】:

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

【问题讨论】:

    标签: java fitnesse file-comparison


    【解决方案1】:

    嗯,有两种方法可以解决这个问题。一个非常充分地利用了 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 文件的更多信息,请参阅 Question about CSV parser for Java

    最后的评论

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

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

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

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

    【讨论】:

    • 感谢 Dan 的回复,看来选项 2 可以满足我的要求。我被困在我应该如何在 Fitnesse 中为这段代码创建 wiki,请帮助
    【解决方案2】:

    FitLibrary 的 CompareFiles 夹具怎么样?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多