หลายคนยังทำงานอยู่กับตัว XML เวลามีปรับแก้อะไร อาจจะเจอปัญหาว่า Version เก่า ถูก พอเพิ่มข้อมูลอะไรเข้ามาแล้วผิดได้ หนึ่งในทางที่ช่วยลดปัญหา คือ การลงทุนทำ Test จะได้ให้มันช่วยเตือนตอน Regression Test แล้ว มีอะไรแปลกๆ ครับ สำหรับตัว XML มันมี Library ที่ช่วยอยู่ครับ คือ ตัว XMLUnit มีทั้ง ฝั่ง DOTNET และ Java เลยครับ โดยใน Blog นี้ ผมจะเขียนในมุมของ DOTNET ครับ
Let's Test
- Add Reference NuGet Gallery | XMLUnit.Core 2.9.2
- สร้าง Unit Test ขึ้นมา
ผมอิงตามหลัง 3A เลยครับ
- Arrange - เตรียมข้อมูลสำหรับตั้งต้นให้พร้อม สร้าง Service / Data ครับ
- Act - ให้ Code Under Test (Method ที่สนใจ สร้างไฟล์ XML ขึ้นมา)
String ActualFilePath = service.GenXml(DSETExpResult, XSDPath, "DS_" + DATASET_TYPE.SWA, DsetExportMessage);
- Assert ตรวจได้หลายแบบครับ ของผมที่เอามาใช้ตรวจ XML 2 ตัว Actual / Expected นั้นตรงกัน หรือป่าว โดยใช้ตัว DiffBuilder ช่วยตรวจครับ Code Assert ที่ได้จะประมาณนี้ครับ
String ExpectedFilePath = _BaseExportPath + "T67392_Exp_030DS_SWA20180521.xml"; //Compare 2 XML Diff d = DiffBuilder.Compare(Input.FromFile(ExpectedFilePath)) .WithTest(Input.FromFile(ActualFilePath)).Build(); Assert.IsFalse(d.HasDifferences(), string.Join(Environment.NewLine + "Next Diff::", d.Differences.Select(r => r.Comparison.ToString())));
นอกจากตรวจว่า XML 2 ไฟล์ เหมือนกัน หรือไม่แล้ว ตัว XMLUnit ยังทำ
- Asserting an XPath Value
Assert.That("<foo>bar</foo>", HasXPathConstraint.HasXPath("/foo")); Assert.That("<foo>bar</foo>", EvaluateXPathConstraint.HasXPath("/foo/text()",Is.EqualTo("bar")));
- Validating a Document กับ XML Schema ก็ได้ครับ
Validator v = Validator.ForLanguage(Languages.W3C_XML_SCHEMA_NS_URI); v.SchemaSources = new ISource[] { Input.FromUri("http://example.com/some.xsd").Build(), Input.FromFile("local.xsd").Build() }; ValidationResult result = v.ValidateInstance(Input.FromDocument(CreateDocument()).Build()); bool valid = result.Valid; IEnumerable<ValidationProblem> problems = result.Problems;
Reference
- XMLUnit - Unit Testing XML for Java and .NET อันนี้มันจะบอกของทั้ง dotnet / java และ พวก api doc ด้วย
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.