2016-04-11 10 views
0

Ich muss einen Junit-Test schreiben, wo ich zwei XML-Dokumente vergleichen muss. Zu Beginn sind diese beiden Dokumente Java-Objekte. Ich bin nicht sicher, wie man sie in XML umwandelt und vergleicht?Junit Assert - Konvertiere zwei Java-Objekte in XML und mache Aussagen über sie als XML

Dies ist der Code, den ich bisher habe:

Actual RsActual = exchange.getIn().getBody(Actual.class); 
ExpectedRs expectedRs = new ExpectedRs(); 
String newRs=FileUtils.getFileContent("src/test/resources/Test/ExpectedRs.xml"); 
expectedRs.setXYZField(newRs.toString()); 
Assert.assertEquals(expectedRs.getXYZField(), RsActual.getXYZField()); 

Antwort

0

Es gibt ein paar verschiedene mögliche Lösungen hier. Am offensichtlichsten ist es, einen XML-Mapper dazu zu bringen, jedes Ihrer Objekte als Strings in XML-Dokumente zu konvertieren und dann eine einfache Gleichheitserklärung durchzuführen.

Dies ist ein Beispiel Jacksons XmlMapper Typ mit:

XmlMapper mapper = new XmlMapper(); 
final String expectedString = mapper.writeValueAsString(expectedRs); 
final String actualString = mapper.writeValueAsString(RsActual); 
assertThat(actualString, equalTo(expectedString)); 

Dies funktioniert nur, wenn Ihre zwei Arten Actual und ExpectedRs genau die gleiche XML erzeugen.

Sie könnten alternativ verwenden, um den XML-Mapper Ihr erwartetes Dokument in ein Objekt zu konvertieren und verwenden Sie das equals() Methode des Objekts, die beiden Dinge zu vergleichen:

XmlMapper mapper = new XmlMapper(); 
ExpectedRs expectedRs = mapper.readValue(newRs, ExpectedRs.class); 
assertThat(RsActual, equalTo(expectedRs)); 

Sie können auch Aussagen über XML-Dokumente verwenden vereinfachen gespeichert als String verwendet eine Bibliothek namens xmlUnit