基本实体框架测试

时间:2013-12-03 00:37:07

标签: c# entity-framework unit-testing

我对EntityFramework相对较新,并且在我进一步深入研究并拥有庞大的代码库来回顾性地编写测试之前,我真的想进入测试阶段。我没有太多使用它,所以方法是相当基本的,如下所示;

public Employee GetEmployee(int employeeID)
{
    using (DatabaseContext db = new DatabaseContext())
    {
        return db.Employees.SingleOrDefault(e => e.idEmployee == employeeID);
    }
}

这在我的应用程序中很好,但是在我的测试项目中,它不起作用,因为测试项目似乎没有读取app.config文件,所以没有DatabaseContext的连接字符串可供使用。我已经阅读了一些关于测试的内容,似乎没有什么真正确定的,尽管这post是处理事务的“官方”方式(它与MSDN相关联。这篇文章似乎相当复杂,但需要我做事情与我目前的情况有很大不同,除非我误解了其中的一部分?

有人可以帮我解决这个问题吗?我甚至不能欺骗并将app.config复制到测试项目,它仍然没有读取它(我也尝试重命名为MyApp.exe.config但仍然没有运气)。我的GetEmployee方法错了吗?我应该做更像链接的帖子吗?或者有没有办法测试我还没找到?

5 个答案:

答案 0 :(得分:0)

@FizzBu​​zz - 这是另一篇讨论如何设置单元测试项目以使用实体框架的文章:

How to get Entity Framework to read my app.config file in Unit Test project

答案 1 :(得分:0)

您可以阅读一种集成测试方法here。 关于配置问题设置Copy to Output Directory属性到Copy Always应该可以正常工作。

答案 2 :(得分:0)

有解决您面临的问题的选项。

选项1:为app.config值创建模拟。对于嘲笑你可以使用Rhino Mock

选项2:在您的单元测试项目中:右键单击项目>添加>现有项目>               选择文件>将其添加为链接。

enter image description here

答案 3 :(得分:0)

如果你不想使用你的实时数据库(就这样!),那你基本上有两个选择:

  1. 使用其他数据库(必须与您的实时数据库相同, 因为EF不允许更改数据库系统,只允许它 位置)并将另一个app.config添加到您的单元测试项目 (除了db之外,它与你的实时项目相同 连接字符串是不同的)。
  2. 使用NDbUnit框架 允许在xml文件中定义数据。在这里你也需要一个 如果您不想对测试数据连接字符串进行硬编码,请为您的测试项目单独安装app.config。 (这种方法只是 建议,如果您的实时数据库没有或只有很少的架构更改, 因为NDbUnit对这些非常过敏。)我写了一篇关于这种方法的博客文章(带有示例解决方案){。{3}}。
  3. 第三种方法是模拟所有EF的东西,但这很快变得过于复杂(如果你有兴趣的话,你也可以在上面提到的帖子的前一部分中找到它。)

    HTH 托马斯

答案 4 :(得分:0)

感谢信息人员,通过提供的各种链接找到了一些有趣的提示和技巧。最后,我从MSDN尝试了这个article,非常有趣!虽然它说它适用于EF6,但它确实适用于以前的版本。它表明EF6是异步的原因。