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 : 0
id ์์ฑ์ ๋ฌด์ํ๊ณ ๋ด์ฉ๋ง ๊ทธ ์ธ์ ๋ด์ฉ์ ๋น๊ตํ์ฌ 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 ๋๋ถ์ ์์ค๊ฐ ๊ฐ๊ฒฐํด์ก๋ค.
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฌธ์์ด ์๋ฅด๊ธฐ split ( Limit ์ฌ์ฉํ์ฌ ๋ง์ง๋ง ๋น ๋ฌธ์์ด ๋ด๊ธฐ ) (1) | 2023.09.12 |
---|---|
[Java] ์ ๊ณฑ๊ทผ(๋ฃจํธ) ๊ตฌํ๊ธฐ / Math.sqrt() (0) | 2022.10.18 |
[Java] ์ฌ์ฉ์ Web/App/Mobile ์ ์ ๊ตฌ๋ถํ๊ธฐ (0) | 2022.10.14 |
[Java] ๋์๋ฌธ์ ํ์ธ ๋ฐ ๋์๋ฌธ์ ๋ณํ (0) | 2022.10.14 |
[Java] List to Array(๋ฐฐ์ด) ๋๋ Array(๋ฐฐ์ด) to List (0) | 2022.10.13 |
๋๊ธ