支持测试数据的 .NET 持久性框架
Posted
技术标签:
【中文标题】支持测试数据的 .NET 持久性框架【英文标题】:.NET persistence framework that supports test data 【发布时间】:2009-09-23 15:51:14 【问题描述】:我们目前使用 SubSonic 作为我们的持久层,因为它很轻,还因为它允许我们输入测试数据,这样我们的 DAL 就可以在不访问数据库的情况下进行测试。我非常喜欢 SubSonic。但是,由于我们还遇到了 SubSonic 的其他问题,所以我现在正在寻找替代方案,而我们的项目还很年轻。长话短说,是否有另一个 .NET 持久性框架允许开发人员插入测试数据?
【问题讨论】:
但是我们真的用单元测试来测试 DAL 吗? ***.com/questions/1257560/… 我们在我们的商店使用 BDD,所以我们为 DAL 编写规范。我们通过 BDD 规范发现了不正确的查询语句。 【参考方案1】:AFAIK,hNibernate 不支持此功能,但如果您将测试数据库配置为在“内存中”模式下工作,则可以实现。 SQLite 支持这种模式。
Here 是配置和测试的示例。
【讨论】:
【参考方案2】:我怀疑您会发现该特定功能是另一个 .NET ORM,但您没有理由不能自己编写代码。如果您想要一个可以随项目扩展的 ORM,NHibernate 是最佳选择。您可能想通过 IronRuby 探索在 .NET 上运行的 Ruby ORM,但我不相信您会找到一个可行的解决方案。
【讨论】:
【参考方案3】:更新:经过长时间的搜索,我们最终切换到 NHibernate 作为我们的持久层,并改变了存储库层的单元测试理念。我们得出的结论是,我们将切换到集成测试存储库层,同时仍对所有其他层进行单元测试。
这是我们的理由:
如果我们只是对存储库层进行单元测试,我们永远不会知道查询将如何在数据库上执行。例如,如果我们使用像 SQLite 这样的内存解决方案,我们的所有规范都可能在开发时通过,但一旦我们部署到生产环境中,实际上可能会失败,因为 1)每个 NHibernate 数据提供程序的实现方式不同,以及 2)差异每个产品(SQLite vs MS MS SQL Server vs Oracle)如何实现数据类型、T-SQL 等。
【讨论】:
以上是关于支持测试数据的 .NET 持久性框架的主要内容,如果未能解决你的问题,请参考以下文章