Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基本实体框架测试_C#_Entity Framework_Unit Testing - Fatal编程技术网

C# 基本实体框架测试

C# 基本实体框架测试,c#,entity-framework,unit-testing,C#,Entity Framework,Unit Testing,我对EntityFramework还比较陌生,我真的很想在深入了解事物之前就开始测试,因为我有一个庞大的代码库来回顾性地编写测试。我没有太多地使用它,所以方法是相当基本的,如下所示 public Employee GetEmployee(int employeeID) { using (DatabaseContext db = new DatabaseContext()) { return db.Employees.SingleOrDefault(e =>

我对EntityFramework还比较陌生,我真的很想在深入了解事物之前就开始测试,因为我有一个庞大的代码库来回顾性地编写测试。我没有太多地使用它,所以方法是相当基本的,如下所示

public Employee GetEmployee(int employeeID)
{
    using (DatabaseContext db = new DatabaseContext())
    {
        return db.Employees.SingleOrDefault(e => e.idEmployee == employeeID);
    }
}
这在我的应用程序中很好,但在我的测试项目中,它不起作用,因为测试项目似乎没有读取app.config文件,因此没有可供
DatabaseContext
使用的连接字符串。我读过一些关于测试的文章,虽然这是一种“官方”的做事方式(链接自MSDN)。但这篇文章似乎相当复杂,要求我做的事情与我现在做的事情大不相同,除非我误解了其中的一些内容


有人能帮我澄清一下吗?我甚至不能作弊并将app.config复制到测试项目中,它仍然无法读取它(我也尝试过重命名为MyApp.exe.config,但仍然没有成功)。我的GetEmployee方法错了吗?我应该做一些更像链接帖子的事情吗?还是有一些我还没有找到的测试方法?

@FizzBuzz-下面是另一篇文章,讨论如何设置单元测试项目以与实体框架一起工作:


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

有许多选项可以解决您面临的问题

选项1:为app.config值创建一个模拟。对于模拟,您可以使用Rhino mock

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


如果您不想使用实时数据库(没错!),那么您基本上有两个选择:

  • 使用另一个数据库(必须与live db相同, 由于EF不允许更改数据库系统,因此只有其 位置),并将另一个app.config添加到单元测试项目中 (与您的实时项目相同,但db 连接字符串不同)
  • 使用框架 允许在xml文件中定义数据 如果不想硬编码测试数据连接字符串,请为测试项目指定单个app.config。(此方法仅适用于 如果您的live db没有或只有很少的架构更改,则建议, 我写了一篇关于这种方法的博文(带有示例解决方案)
  • 第三种方法是模拟所有EF内容,但这很快就会变得过于复杂(如果您感兴趣,您也可以在上述文章的前一部分中找到)


    Thomas

    感谢大家提供的信息,通过提供的各种链接找到了一些有趣的提示和技巧。最后,我从MSDN上试用了这个,很有趣!虽然它说它是针对EF6的,但它实际上适用于以前的版本。它表明EF6是用于异步的东西的原因。

    这是一个开始……但我真的不应该被测试不管怎么说,在一个实时数据库上测试update/insert/delete方法是一个坏主意。而且它总是在变化。所以最好弄清楚模拟的一面……在我看来,创建一个新的空数据库很容易,测试要么针对测试数据库,要么实现一个自定义的提供r、 为什么测试需要生产数据库?@FizzBuzz-是的,你可以肯定地利用实体框架DbContext和实时开发/测试数据库的赝品。是的,问题是如何基于当前的实现(请参阅我问题中的代码片段).据我所知,我必须做一些适当的更改才能使用假货,但我以前从未测试过,因此我不知道从何处开始,或者这是否是正确的选择。我将查找Rhino Mock,感谢您提供的信息。EF似乎很难编码到哪里可以查看自动生成的文件,所以我不确定这是正确的解决方案n、 我也尝试过“添加为链接”,但没有成功,这让我更加相信模仿app.config是行不通的。不过,我已经找到了模仿的方法,我会很快发布我的答案。