在使用NDbUnit初始化的单个测试中读取/加载多个XML

时间:2011-05-01 16:56:50

标签: unit-testing vs-unit-testing-framework ndbunit

我正在尝试使用NDbUnit。我为每个表创建了单独的XSD,而不是一个用于完整数据库的大型XSD。

当我只使用单个XSD和单个xml读取时,我的测试运行正常。但是对于特定测试,我需要在两个或三个不同(但相关)的表中包含数据。如果我尝试读取多个xsd和xml,则抛出异常。

这是我的代码

        [ClassInitialize()]
        public static void MyClassInitialize(TestContext testContext)
        {
            IDbConnection connection = DbConnection.GetCurrentDbConnection();
            _mySqlDatabase = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connection);
            _mySqlDatabase.ReadXmlSchema(@"Data\CompanyMaster.xsd");  
            _mySqlDatabase.ReadXml(@"Data\CompanyMaster.xml");
            _mySqlDatabase.ReadXmlSchema(@"Data\License.xsd");
            _mySqlDatabase.ReadXml(@"Data\License.xml");
            _mySqlDatabase.ReadXmlSchema(@"Data\LicenseDetails.xsd");
            _mySqlDatabase.ReadXml(@"Data\LicenseDetails.xml");
            _mySqlDatabase.ReadXmlSchema(@"RelatedLicense.xsd");
            _mySqlDatabase.ReadXml(@"Data\RelatedLicense.xml");    
        }

以下是我尝试阅读License.XSD的例外情况,如上所示

  

类初始化方法   ESMS.UnitTest.CompanyManagerTest.MyClassInitialize   扔了例外。   System.ArgumentException:   System.ArgumentException:Item有   已被添加。键入字典:   'EnableTableAdapterManager'键正在   补充:'EnableTableAdapterManager'。

我不确定这是否是使用NDbUnit读取多个XML,XSD的正确方法。我用Google搜索并 溢出 (即搜索到的堆栈溢出),但无法获得任何明智的方向。有人可以解释出现了什么问题以及如何纠正?

2 个答案:

答案 0 :(得分:2)

这不是NDbUnit的使用方式。不支持将多个XSD或XML文件读入单个测试范围。 NDbUnit使用单个XSD中的信息来分析表之间的关系(FK等),以便能够在其CRUD操作期间正确地操作表,因此要求是单个XSD描述表的整个范围您希望NDbUnit在测试运行期间进行操作。

可能可以加载多个XML文件(包含您的测试数据),但这不是经过测试/支持的方案。我有兴趣了解您所拥有的哪种使用方案会排除只有一个包含所需测试数据的XML文件。

但它的肯定只能一次加载一个XSD文件(包含一个或多个表的模式及其关系等)。

希望这可以解决这个问题。

答案 1 :(得分:2)

Sbohlen给我指路。

事实上,截至目前,不支持加载多个XSD。

但幸运的是,可以针对单个XSD加载多个XML。

所以我所做的是创建一个XSD并将所有相关表拉入其中。然后使用ReadXml旁边的AppendXml sytanx。这样我就可以将所需的测试数据加载到多个表中,并且我的测试开始传递。

此链接会分享有关AppendXml http://code.google.com/p/ndbunit/issues/detail?id=27

的更多信息