Java μμ XML λκ°μ νμΌ λΉκ΅ νκΈ° - XMLUnit
XML νμΌ λκ°λ₯Ό λΉκ΅ν΄μΌ νλ μΌμ΄ μμ΄μ μ°Ύμ보λ XMLUnit μ΄λΌλ λΌμ΄λΈλ¬λ¦¬κ° μμλ€.
κ·Έλ¦¬κ³ XML νμΌ λ΄μ© μ€μμλ νΉμ μμ±(Attribute) κ°μ μ μΈνκ³ λΉκ΅ν΄μΌ νλ€.
μ²μμ μ°Ύμμλλ 1.* λ²μ μΌλ‘ νμΈν΄μ λ΄κ° μνλ κΈ°λ₯μ μ°Ύμ μ μμκ³ ,
DocumentBuilder λ‘ DOM μΌλ‘ λ§λ€μ΄μ λΉκ΅ν΄μΌ νλ κ³ λ―Όνκ³ μμλ
Apache μμ μ 곡νλ XMLUnit μ 2.* λ²μ μ΄ μλ€λ κ²μ μμκ³ , λ°λ‘ λ¬Έμ λ₯Ό ν΄κ²° ν μ μμλ€.
Maven dependency λ λ€μκ³Ό κ°λ€.
<!-- https://mvnrepository.com/artifact/org.xmlunit/xmlunit-core -->
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-core</artifactId>
<version>2.9.0</version>
<scope>test</scope>
</dependency>
첫λ²μ§Έ ν μ€νΈ μ½λλ λ€μκ³Ό κ°λ€.
@Test
public void xmlUnitTest() {
String source = "<employees> " +
"<employee id='1'> " +
"<name>James</name> " +
"<department>Sales</department> " +
"</employee> " +
"<employee id='2'> " +
"<name>James</name> " +
"<department>Sales</department> " +
"</employee> " +
"</employees>";
String target = "<employees> " +
"<employee id='3'> " +
"<name>James</name> " +
"<department>Sales</department> " +
"</employee> " +
"<employee id='4'> " +
"<name>James</name> " +
"<department>Sales</department> " +
"</employee> " +
"</employees>";
Diff myDiff = DiffBuilder.compare(source).withTest(target)
.checkForSimilar()
.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byName))
.ignoreWhitespace()
// id μμ±μ μ μΈνκ³ λΉκ΅
.withAttributeFilter(a -> "attributeName".equals("id"))
.build();
List<Difference> differences = (List<Difference>) myDiff.getDifferences();
System.out.println("size : "+ differences.size());
for (Difference difference : differences) {
System.out.println(difference);
}
}첫λ²μ§Έλ‘ λκ°μ xml λ΄μ©μ κ°κ³ , id λ§ λ€λ₯Όκ²½μ° λλ € 보μλ€.
size : 0id μμ±μ 무μνκ³ λ΄μ©λ§ κ·Έ μΈμ λ΄μ©μ λΉκ΅νμ¬ Difference κ°μ΄ 0 μΌλ‘ λμλ€.
λλ²μ§Έ ν μ€νΈ μ½λλ λ€μκ³Ό κ°λ€.
@Test
public void xmlUnitTest() {
String source = "<employees> " +
"<employee id='1'> " +
"<name>James</name> " +
"<department>Sales</department> " +
"</employee> " +
"<employee id='2'> " +
"<name>James</name> " +
"<department>Sales</department> " +
"</employee> " +
"</employees>";
String target = "<employees> " +
"<employee id='3'> " +
"<name>David</name> " +
"<department>Sales</department> " +
"</employee> " +
"<employee id='4'> " +
"<name>James</name> " +
"<department>Sales</department> " +
"</employee> " +
"</employees>";
Diff myDiff = DiffBuilder.compare(source).withTest(target)
.checkForSimilar()
.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byName))
.ignoreWhitespace()
// id μμ±μ μ μΈνκ³ λΉκ΅
.withAttributeFilter(a -> "attributeName".equals("id"))
.build();
List<Difference> differences = (List<Difference>) myDiff.getDifferences();
System.out.println("size : "+ differences.size());
for (Difference difference : differences) {
System.out.println(difference);
}
}첫λ²μ§Έμ λ€λ₯Έμ μ id κ° 3μΈ κ³³μ name μ David λ‘ λ³κ²½ νμλ€.
κ·Έλ¦¬κ³ ν
μ€νΈ ν κ²½μ°
size : 1
Expected text value 'James' but was 'David' - comparing ...list μ¬μ΄μ¦κ° 1 μ΄κ³ James λ₯Ό μμνμ§λ§ David κ°μ κ°μ§κ³ μλ€κ³ μΆλ ₯ λμλ€.
XMLUnit λλΆμ μμ€κ° κ°κ²°ν΄μ‘λ€.