アプリケーションの単体テストを支援するためにNDbUnitを使用することを検討しています。質問のタイトルにあるように、NDbUnitのテストデータを別々のXMLファイルに保存できるかどうか疑問に思っています。私の単一のテストデータXMLファイルは非常に大きく、さらにいくつかのエンティティを追加すると管理できなくなる可能性があることにすでに気づきました。
さて、この質問を読んだら、それは不可能のように見えますが、私は確信したいと思います。
それが役立つ場合、これは問題を説明するサンプルコードです。アイデアは、プログラムがベンダーに関連付けられているということです。3つのベンダーを含むテストデータを設定しました。2番目のベンダーには3つのプログラムがあります。TestData.xmlには、すべてのベンダーとプログラムのすべてのテストデータが含まれています。私がそれを使うとき、ユニットテストは期待通りに合格します。複数の呼び出しを使用して個々のXMLファイルを個別に読み取ろうとするとdb.PerformDbOperation(DbOperationFlag.CleanInsertIdentity);
、2番目の呼び出しが最初の呼び出しで行われたことを上書きするように見えます。
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);
}
これは機能します: