2012-10-19 42 views
1

有这个问题的.NET版本回答这里:XML input/output with FitnesseXML输入/与Java输出FitNesse的

我需要做的是与FitNesse中的Java版本,并似乎没有要任何类似。我有一些接受XML并返回XML的测试,所以我需要输入和期望的输出来处理字段中的XML。我已经尝试过各种html转义,但似乎并没有完成比较方面的工作。 XML是任意的,所以我不能将它解析为域对象并比较单个字段(嗯,我可以,但会有大量不同的对象映射)。

任何人都可以通过通用的方式找到解决这个问题的方法吗?某个地方存在的.net解决方案的自定义Java等价物?

+1

您的目标是在测试页中使用XML并在测试页中将e比较结果进行比较?在测试XML输出时存在一个问题,因为顺序不一定有意义,所以顺序会从连续运行改变。 FitNesse进行直接的文本比较,以便可以导致测试故障转移不改变XML语义的格式更改。我们通过编写可以使用XPath查询XML的特殊装置来解决此问题。如果您觉得此评论符合您的需求,我会寻求更正式的答案。 –

+0

我想我必须自己写点东西。 Fitnesse对HTTP调用的结果没有任何比较。突出一个简单的“确保页面X有内容Y”。在我的情况下,该调用返回SOAP(这是XML)。 XML排序在我的情况下是受控的。嗯,我必须建立一个自定义的解决方案。 –

回答

0

不知道这是否是最佳解决方案。您可能想要使用一些XML框架,例如XStream它有非常简单的API将XML转换为JAVA对象。使用这个,你可能想要在JAVA中转换这两个XML文件并使用JAVA比较。

的简单步骤将是:

  1. 定义简单的Java对象(PO​​JO)例如MyXMLObj来映射Java属性中的XML属性。
  2. 在上述POJO类MyXMLObj中创建/生成equals方法。
  3. 转换您个XML的Java作为:

    XStream xstream = new XStream(); 
    XStream xstream = new XStream(new DomDriver()); 
    //or 
    //XStream xstream = new XStream(new StaxDriver()); 
    
    MyXMLObj myXMLObj1= (MyXMLObj)xstream.fromXML(xml1); 
    MyXMLObj myXMLObj2= (MyXMLObj)xstream.fromXML(xml2); 
    
  4. 只需两个比较对象为:

    if(myXMLObj1.equals(myXMLObj2)){ 
        System.out.println("Matching"); 
    }else{ 
        System.out.println("Not Matching"); 
    } 
    
+0

简而言之,返回XML的服务正在返回xslt消耗的核心XML对象。根据测试用例,xslt可能是几十个之一,所以XML输出也有几十种格式。所以如果我正确理解你的方法,我需要数十个POJO。 –

+0

如果它们与属性不同,则只定义一个具有所有可能属性的属性。 –

0

我遇到过类似的事情,其中​​的XML响应可能在未来或没有按更改” t始终确认特定的样式,或者xml不作为xml对象返回,而是返回字符串等。

我写了一个通用夹具,它将采用一个xml字符串并解析它以给我们一个xml doc对象。我还会从wiki中捕获xml元素路径和期望值,并确认预期值是否存储在xml中或者不使用xpath。

!|ValidateXmlValue                | 
|xmlString|xmlElem          |getXMLvalue?   | 
|$respBody|/root/childnode1/        |${variable}    | 

这样,用户可以灵活简单地给该节点的完整路径查询节点值并将其与输入变量等,即使有新的变化,唯一的测试将需要改变(你可以存储作为设置步骤的一部分,也是每个xml元素的路径)