2011-05-20 158 views
0

我正在寻找使用NDbUnit来帮助进行应用程序的单元测试。正如问题标题所述,我想知道是否可以将NDbUnit测试数据保存在单独的XML文件中。我已经注意到,我的单个测试数据XML文件相当大,并且可能会在添加更多实体时变得无法管理。是否可以将NDbUnit测试数据保存在单独的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

当心这意味着你使用的是DbOperationFlag价值; “CleanInsertIdentity”的“Clean”部分意思是“在执行进程的插入标识部分之前清除现有记录”。

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

你可以尝试用插入或InsertIdentity同样的过程,看看你能达到你所追求的,但设计 CleanInsertIdentity是不会对这种情况下的工作:)

+0

这是直截了当的。谢谢sbohlen,这似乎正是我想要的。 – Malice 2011-05-23 07:34:38

相关问题