比较两个类似的xml文件时JUnit测试失败

时间:2013-04-17 08:23:12

标签: java encoding junit dbunit

我尝试用dbunit实现测试但是我失败了。

总结

  • 我有一个伪造数据库的导入xml文件, inputFlatXmlDataSet.xml
  • 我生成导出文件 outputFlatXmlDataSet.xml
  • 最后的测试是确保两个文件都等于

但他们不是。肉眼没有区别,即使与日食或记事本差不多,++也没有显示任何东西。

我遵循了本教程:http://www.scub-foundation.org/accueil/tutoriaux/tutorial-dbunit/

我警告你这是法语教程,我怀疑第二个文件的编码不是UTF-8, 但我没有设法强制写入UTF-8。

TestDBUnit.java 外,所有文件和代码都与教程相同。
这是代码:

 public void testExportData() throws Exception {
    // On récupère le jeu de données du fichier XML
    IDataSet dataSet = getDatabaseDataSet();

    // Fichier XML du jeu de données d'import
    File inputFile = new File(INPUT_DATA_SET_FILENAME);
    // On vérifie que le fichier existe
    assertNotNull(inputFile);
    // Fichier XML du jeu de données d'export
    File outputFile = new File(OUTPUT_DATA_SET_FILENAME);
    FileOutputStream(outputFile), "UTF-8")));
    FlatXmlDataSet.write(dataSet, new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"));
    // On compare les deux fichiers XML pour vérifier qu'ils sont identiques
    String inputDataSetString = FileUtils.readFileToString(inputFile/*,
            "UTF-8"*/).replace("  ", "\t").trim();
    String outputDataSetString = FileUtils.readFileToString(outputFile/*,
            "UTF-8"*/).replace("  ", "\t").trim();
    assertEquals(inputDataSetString, outputDataSetString);//The failure

我只需添加一个OutputStreamWriter作为Wrapper来强制进行编码,但它没有改变任何内容。

如果您想了解更多详情,请不要犹豫。

1 个答案:

答案 0 :(得分:4)

使用字符串相等来比较XML文件是不明智的,除非您正在测试XML生成库并关心漂亮的打印。

在所有其他情况下,您可能关心两个文件的语义相等(即它们是否包含相同的数据?)。为了帮助进行这种比较,请考虑使用XMLUnit。这将比较文件的内容,而不必担心空格或编码。