Я хотел бы протестировать самописанный синтаксический анализатор XML, который хорошо принимает строку XML и возвращает ее модельное представление.
T Parse(string content);
Проблема, с которой я сталкиваюсь, касается части утверждения моего теста. Потому что каждый раз, когда я звоню Create<T>()
, он генерирует новые случайные данные, а это не то, что мне нужно в этом случае. Мне нужен общий набор тестовых данных, который я могу использовать в следующем порядке:
a) Создать строку XML, которую можно передать моему анализатору
b) Создать представление модели, используя тот же набор тестовых данных
c) Сравните результаты синтаксического анализатора XML с сгенерированным представлением модели и Assert.AreEqual()
Я столкнулся с Freeze<T>()
методом, который «звучит» так, как будто он подходит моей цели. Однако я понятия не имею, как его использовать.
Итак, вопрос: как я могу использовать общий набор тестовых данных для генерации различных объектов?
Это мой текущий подход и класс генератора статических данных.
public static class TestDataGenerator
{
public static string GenerateSyntheticXmlTestData<T>(int minOid, int maxOid, int amount = 5)
{
var fixture = new Fixture()
{
RepeatCount = amount
};
fixture.Customizations.Add(new OidGenerator(minOid, maxOid));
fixture.Customizations.Add(new EnableAllProperties());
var testData = fixture.Create<T>();
var serializedXmlTestData = XmlSerializerHelper.Current.SerializeToXmlDocument(testData, Encoding.UTF8);
return serializedXmlTestData;
}
public static ICollection<T> GenerateSyntheticModelTestData<T>(int minOid, int maxOid, int amount = 1)
{
var fixture = new Fixture()
{
RepeatCount = 1
};
fixture.Customizations.Add(new OidGenerator(minOid, maxOid));
var testData = fixture.CreateMany<T>(amount).ToList();
return testData;
}
}
И вот так я хотел бы проверить парсер. Я надеюсь, ясно, чего я пытаюсь достичь.
[Fact]
public void ShouldParse()
{
// [...]
var xmlContent = TestDataGenerator.GenerateSyntheticXmlTestData<MyType>(minOid: 1, maxOid: 100, amount: 5);
// Here I would like to generate a model object using the same data
//
// var modelContent = new Fixture().Create<ModelType>();
var parsedContent = parser.Parse(xmlContent);
//parsedContent.Should().BeEquivalentTo(modelContet);
}