0

我正在尝试使用 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:已添加项目。字典中的键:“EnableTableAdapterManager” 正在添加的键:“EnableTableAdapterManager”。

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

4

2 回答 2

2

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

可能会加载多个 XML 文件(包含您的测试数据),但这不是经过测试/支持的场景。我有兴趣了解您的使用场景会阻止只有一个 XML 文件包含您所需的测试数据。

绝对是一次只能加载一个 XSD 文件(包含一个或多个表的模式及其关系等)的情况。

希望这能澄清一点。

于 2011-05-02T11:33:40.867 回答
2

斯博伦给我指路了。

确实,就目前而言,不支持加载多个 XSD。

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

所以我所做的是创建一个单一的 XSD 并将所有相关的表拉到它上面。然后使用AppendXmlReadXml 旁边可用的 sytanx。通过这种方式,我可以将所需的测试数据加载到多个表中,并且我的测试开始通过。

此链接将分享有关AppendXml http://code.google.com/p/ndbunit/issues/detail?id=27的更多信息

于 2011-05-09T15:47:03.560 回答