I wanted to announce a small library I have on my GitHub: XmlUnit.Xunit, which a library for testing against XML. It's a port of XmlUnit over to use Xunit.NET assertions instead of NUnit assertions, plus an addition of a fluent assertion style. The following is the projects README, and gives you a feel for the purpose of the project. Enjoy.
Intro
XmlUnit.Xunit provides Xunit.NET based assertions tailored to testing XML. The project contains assertions for comparing XML, applying XPath and XSLT expression to XML under test. All assertions come in two flavors: A traditional set of static assertion methods, and a fluent "should" style assertions.
Usage
You grab the source from here, download a build from here or install the NuGet package.
Beware that both the binary in the download tab and the NuGet package may give you assembly conflicts on Xunit.NET. To get around that you need an assmebly rebind of Xunit.NET.
Traditional Assertions
The traditional assertions in XmlUnit.Xunit er all static methods on the class XmlAssertion, and are used like this:
404 [Fact]
405 public void AssertStringEqualAndIdenticalToSelf()
406 {
407 string control = "<assert>true</assert>";
408 string test = "<assert>true</assert>";
409 XmlAssertion.AssertXmlIdentical(control, test);
410 XmlAssertion.AssertXmlEquals(control, test);
411 }
412
413 private static readonly string MY_SOLAR_SYSTEM =
414 "<solar-system><planet name='Earth' position='3' supportsLife='yes'/><planet name='Venus' position='4'/></solar-system>";
415
416 [Fact]
417 public void AssertXPathExistsWorksForExistentXPath()
418 {
419 XmlAssertion.AssertXPathExists("//planet[@name='Earth']",
420 MY_SOLAR_SYSTEM);
421 }
422
423 [Fact]
424 public void AssertXPathEvaluatesToWorksForMatchingExpression()
425 {
426 XmlAssertion.AssertXPathEvaluatesTo("//planet[@position='3']/@supportsLife",
427 MY_SOLAR_SYSTEM,
428 "yes");
429 }
430
431 [Fact]
432 public void AssertXslTransformResultsWorksWithStrings()
433 {
434 string xslt = XsltTests.IDENTITY_TRANSFORM;
435 string someXml = "<a><b>c</b><b/></a>";
436 XmlAssertion.AssertXslTransformResults(xslt, someXml, someXml);
437 }
438
Fluent Assertions
The fluent assertions are all extension methods with names starting with Should, and are used like this:
404 [Fact]
405 public void AssertStringEqualAndIdenticalToSelf()
406 {
407 string control = "<assert>true</assert>";
408 string test = "<assert>true</assert>";
409 test.ShouldBeXmlIdenticalTo(control);
410 test.ShouldBeXmlEqualTo(control);
411 }
412
413 private static readonly string MY_SOLAR_SYSTEM =
414 "<solar-system><planet name='Earth' position='3' supportsLife='yes'/><planet name='Venus' position='4'/></solar-system>";
415
416 [Fact]
417 public void AssertXPathExestsWorksForXmlInput()
418 {
419 new XmlInput(MY_SOLAR_SYSTEM)
420 .XPath("//planet[@name='Earth']")
421 .ShouldExist();
422 }
423
424 [Fact]
425 public void AssertXPathEvaluatesToWorksForMatchingExpression()
426 {
427 MY_SOLAR_SYSTEM
428 .XPath("//planet[@position='3']/@supportsLife")
429 .ShouldEvaluateTo("yes");
430 }
431
432 [Fact]
433 public void AssertXPathExistsWorksWithXpathFirstWithXmlInput()
434 {
435 var sut = new XmlInput(MY_SOLAR_SYSTEM);
436
437 "//planet[@name='Earth']".AppliedTo(sut).ShouldExist();
438 }
439
440 [Fact]
441 public void AssertXPathEvaluatesToWorksWithXPathFirst()
442 {
443 "//planet[@position='3']/@supportsLife"
444 .AppliedTo(MY_SOLAR_SYSTEM)
445 .ShouldEvaluateTo("yes");
446 }
447
448 [Fact]
449 public void AssertXslTransformResultsWorksWithStrings()
450 {
451 string xslt = XsltTests.IDENTITY_TRANSFORM;
452 string someXml = "<a><b>c</b><b/></a>";
453
454 someXml.XsltTransformation(xslt).ShouldResultIn(someXml);
455 }
Further Information
Is probably best gleened off the tests in this project, especially the tests for XmlAssertions and the tests for Should assertions.
Contribute
Please do! Fork, code, send pull request. :-)
No comments:
Post a Comment