Можно ли сохранить тестовые данные NDbUnit в отдельных файлах XML? - PullRequest
0 голосов
/ 20 мая 2011

Я смотрю на использование 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);
}

Это работает:

1 Ответ

1 голос
/ 21 мая 2011

Остерегайтесь значения используемого вами значения DbOperationFlag;«Очистить» часть «CleanInsertIdentity» означает «очистить существующие записи перед выполнением части процесса идентификации с вставкой».

См. http://code.google.com/p/ndbunit/source/browse/trunk/NDbUnit.Core/DbOperationFlag.cs для получения дополнительной информации о возможных значениях перечисления.

Вы можете попробовать тот же процесс с Insert или InsertIdentity, чтобы увидеть, можете ли вы достичь того, что вы хотите, но по замыслу CleanInsertIdentity не будет работать для этого сценария:)

...