How to unit test xml file?

I already have an XSD schema for the next XML file

<?xml version="1.0"?>
<note>
 <to> </to>
 <from> </from>
 <datetime>  </datetime>
 <heading> </heading>
 <body> </body>
</note>

I used NoteGnerator to generate schema-based xml files. Xml files should be generated for some templates / specifications, such as:

<?xml version="1.0"?>
<note>
 <to> Lucy </to>
 <from> Lily </from>
 <datetime> --date--time-- </datetime>
 <heading> reminder </heading>
 <body> do not forget my pen </body>
</note>

Another template / specification will look like this:

<?xml version="1.0"?>
<note>
 <to> Lily </to>
 <from> Lucy </from>
 <datetime> --date--time-- </datetime>
 <heading> reply </heading>
 <body> no problem </body>
</note>

where <datetime>is the dynamic value when generating xml (therefore, this value cannot be predetermined). Based on the XSD schema and these two XML specifications, I can easily generate XML messages.

How can I unit test generated xml files?

XML ? xml ? datetime , , XML , , , ? deserialise xml to # object, #?

+4
2

XML node, datetime. - . ( ) :

  • , (, , /)

, , /, :

public class NoteGenerator
{
    private readonly ICurrentDateProvider currentDateProvider;
    public NoteGenerator(ICurrentDateProvider )currentDateProvider
    {
        this.currentDateProvider = currentDateProvider;
    }

    public string GenerateNote()
    {
        var currentDate = currentDateProvider.Now;
        // ...

unit test , , , (, FakeItEasy):

var dateProvider = A.Fake<ICurrentDateProvider>();
A.CallTo(() => dateProvider.Now).Returns(new DateTime(2014, 01, 31, 10, 30));
var generator = new NoteGenerator(dateProvider);

// ...

, , , :

var oneMinuteAgo = DateTime.Now.AddMinutes(-1.0);
var generator = new NoteGenerator();

var dateFromXml = // extract 
Assert.That(dateFromXml, Is.GreaterThan(oneMinuteAgo));
+1

. , , XML, XML . , .

// This is your expected object which you are going to write to xml.
var sourceObject = new SomeClassToWriteInXML();

// Writing object to XML.
var document = new XDocument();
var serializer = new XMLSerializer(typeof(SomeClassToWriteInXML));
using (var writer = document .CreateWriter())
{
    serializer.Serialize(writer, source);
}
// write document to a file.

// Now document has the XML document.
// Need to read file you have just created. For testing sake I am reading document.
var actual = new SomeClassToWriteInXML();
// Deserialize xml to get actual object (which should be equal to sourceObject)
using (var reader = document.CreateReader())
{
    actual = (SomeClassToWriteInXML)serializer.Deserialize(reader);
}

Assert.AreEqual(expected.First(), actual.First());
+2

Source: https://habr.com/ru/post/1524671/


All Articles