Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# 如何测试EF模型_C#_Asp.net Mvc 3_Testing - Fatal编程技术网

C# 如何测试EF模型

C# 如何测试EF模型,c#,asp.net-mvc-3,testing,C#,Asp.net Mvc 3,Testing,我试图弄清楚如何通过TDD编写实体框架代码。我发现这很难,因为我没有像过去使用RubyonRails那样的测试数据库。用一个例子可能更容易解释: 目前我有: public interface IMyContext { IDbSet<UserProfile> Users { get; set; } } 我不知道如何在没有运行数据库的情况下测试UserModel代码。我知道我可以模拟MyContext-但是代码MyContext.Users.Where。。。可能涉及复杂的模拟?

我试图弄清楚如何通过TDD编写实体框架代码。我发现这很难,因为我没有像过去使用RubyonRails那样的测试数据库。用一个例子可能更容易解释:

目前我有:

public interface IMyContext
{
    IDbSet<UserProfile> Users { get; set; }
}
我不知道如何在没有运行数据库的情况下测试UserModel代码。我知道我可以模拟MyContext-但是代码MyContext.Users.Where。。。可能涉及复杂的模拟?我是否构造了错误的代码?在没有测试数据库的情况下,如何为模型编写测试?还是我应该伪造上下文


谢谢

将代码分解为核心组件,您将意识到您所需要做的就是模拟上下文的
用户
属性。在此之后,Where实际上只是一个针对
IEnumerable
对象的静态方法

var users = myContext.Users;
var returnEnumerable = Enumerable.Where(users, u=>u.id == id);
return returnEnumerable

因此,只需以这样的方式模拟您的上下文:当调用
.Users
时,它将返回一个由您创建的
IDbSet
,好吧,这很有意义,但IDbSet不是一个接口吗?所以我们也必须模仿它?你可以这样做,或者你可以让用户作为IDbSet的具体实现返回
var users = myContext.Users;
var returnEnumerable = Enumerable.Where(users, u=>u.id == id);
return returnEnumerable