2013-04-17 36 views
3

我试图用dbunit来实现测试,但是我失败了。JUnit测试失败,同时比较两个类似的xml文件

综上所述

  • 我有我的假数据库导入XML文件,inputFlatXmlDataSet.xml
  • 我产生一个输出文件outputFlatXmlDataSet.xml
  • 最终测试以确保这两个文件都等于

但他们不是。肉眼没有什么区别,即使是日食或记事本++的diff也不会显示任何内容。

我跟着这个教程: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为包装,以迫使编码,但它并没有改变任何东西。

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

+0

什么是'FileUtils'?它来自Apache commons-io吗? – longhua

+0

您是否尝试输出'inputDataSetString'和'outputDataSetString',然后比较它们? – longhua

+0

如果可能,请发布这两个XML文件。最好使用http://xmlunit.sourceforge.net/来比较XML文件。 – longhua

回答

3

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

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