Я смотрю на использование NDbUnit, чтобы помочь с модульным тестированием приложения. Как гласит заголовок вопроса, мне интересно, возможно ли сохранить тестовые данные NDbUnit в отдельных файлах XML. Я уже заметил, что мой XML-файл с одними тестовыми данными довольно большой и может стать неуправляемым, когда я добавлю в него еще несколько сущностей.
Теперь, прочитав этот вопрос, похоже, что это невозможно, но я просто хотел бы быть уверен.
Если это поможет, это пример кода, который иллюстрирует проблему. Идея заключается в том, что программы связаны с поставщиками. Я настроил тестовые данные, содержащие 3 поставщика, второй из которых имеет 3 программы. TestData.xml содержит все тестовые данные для всех поставщиков и программ. Когда я его использую, юнит тест проходит как положено. Если я пытаюсь прочитать отдельный XML-файл по отдельности, используя несколько вызовов db.PerformDbOperation(DbOperationFlag.CleanInsertIdentity);
, создается впечатление, что второй вызов перезаписывает все, что было сделано в первом.
private const string xmlSchema = @"..\..\schema.xsd";
// All of the test data in one file.
private const string xmlData = @"..\..\XML Data\TestData.xml";
// Individual test data files.
private const string vendorData = @"..\..\XML Data\Vendor_TestData.xml";
private const string programData = @"..\..\XML Data\Program_TestData.xml";
public void WorkingExampleTest()
{
INDbUnitTest db = new SqlDbUnitTest(connectionString);
db.ReadXmlSchema(xmlSchema);
db.ReadXml(xmlData);
db.PerformDbOperation(DbOperationFlag.CleanInsertIdentity);
VendorCollection vendors = VendorController.List();
Assert.IsNotNull(vendors);
ProgramCollection collection = VendorController.GetPrograms(vendors[1].VendorID);
Assert.IsNotNull(collection);
Assert.IsTrue(collection.Count == 3);
}
public void NotWorkingExampleTest()
{
INDbUnitTest db = new SqlDbUnitTest(connectionString);
db.ReadXmlSchema(xmlSchema);
db.ReadXml(vendorData);
db.PerformDbOperation(DbOperationFlag.CleanInsertIdentity);
db.ReadXml(programData);
db.PerformDbOperation(DbOperationFlag.CleanInsertIdentity);
VendorCollection vendors = VendorController.List();
Assert.IsNotNull(vendors);
// This line throws an ArgumentOutOfRangeException because there are no vendors in the collection.
ProgramCollection collection = VendorController.GetPrograms(vendors[1].VendorID);
Assert.IsNotNull(collection);
Assert.IsTrue(collection.Count == 3);
}
Это работает: