是否可以将NDbUnit测试数据保存在单独的XML文件中?

时间:2011-05-20 10:08:38

标签: c# ndbunit

我正在寻找使用NDbUnit来帮助应用程序的单元测试。正如问题标题所述,我想知道是否可以将NDbUnit测试数据保存在单独的XML文件中。我已经注意到我的单个测试数据XML文件非常大,当我向它添加更多实体时,它可能开始变得无法管理。

现在,看过this问题,看起来好像不可能,但我想确定一下。

如果有帮助,这是说明问题的示例代码。这个想法是程序与供应商相关联。我已经设置了包含3个供应商的测试数据,第二个包含3个程序。 TestData.xml包含所有供应商和程序的所有测试数据。当我使用它时,单元测试按预期通过。如果我尝试使用对db.PerformDbOperation(DbOperationFlag.CleanInsertIdentity);的多次调用分别读取单个XML文件,则好像第二次调用会覆盖第一次调用所做的任何操作。

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 个答案:

答案 0 :(得分:1)

注意您正在使用的DbOperationFlag值的含义; “CleanInsertIdentity”的“Clean”部分表示“在执行进程的insert-identity部分之前清除现有记录”。

有关可能的枚举值的更多信息,请参阅http://code.google.com/p/ndbunit/source/browse/trunk/NDbUnit.Core/DbOperationFlag.cs

您可以尝试使用Insert或InsertIdentity执行相同的过程,看看您是否可以实现您的目标,但按设计 CleanInsertIdentity不适用于此场景:)