有没有人有使用SQLite编写集成测试的经验?

时间:2011-08-04 22:19:31

标签: unit-testing entity-framework entity-framework-4 entity-framework-4.1

我们在项目中使用MVC,Entity Framework 4.1 Code First,SQL Server。

请分享您的经验:您如何对数据服务层进行单元测试?数据服务层我的意思是服务应该由MVC控制器运行,这些控制器内部有某种DbContext派生类声明,因此它们依赖于这个EF DbContext,并封装了一些业务\数据逻辑来获取和存储数据。

在阅读了一些文章和帖子后,我倾向于使用单独的数据库来构建单元/集成测试,我更喜欢使用内存(如SQLite)而不是SQL Compact。但是我甚至不确定是否有可能,如果你有这样的经历,可以请分享几行代码来展示你是如何实现这一目标的。

2 个答案:

答案 0 :(得分:4)

单元测试意味着测试单元=没有数据库,没有外部依赖,只测试单个可测试单元。一旦你想要涉及数据库,你就不再进行单元测试 - 你正在进行集成测试。

我写了关于依赖于EF的代码的单元测试/集成测试的多个答案。最后一个是here。因此,如果您的服务层在上下文中创建linq查询,则无法对它们进行可靠的单元测试。您需要集成测试。

我会使用您希望在实际代码中使用的相同数据库。为什么?因为数据库提供的映射和行为可以与LINQ的实现不同。同样在SQL服务器的情况下,您可以使用special EF features,它不必在SQLite中可用。另一个原因是,上次我检查它时,SQLite的提供者不支持数据库删除,娱乐等,这是人们通常想要用于集成测试的东西。解决方案可以是Devart provider

答案 1 :(得分:0)

我根本不使用单独的数据库。实际上,我的单​​元测试根本不使用数据库。

我的策略是为数据库实体创建IEnityRepository接口(用实际名称替换实体)。然后我将它们传递给我的控制器的构造函数。

在单元测试期间,我只是使用Mocking库来传递我需要的存储库的模拟实现,并返回一些我可以在单元测试中使用的已知数据。