c# - 如何测试 EF 模型

标签 c# asp.net-mvc-3 testing

我正在尝试弄清楚如何通过 TDD 编写 Entity Framework Code First 代码。我发现这很难,因为我没有像过去使用 Ruby On Rails 那样的测试数据库。用一个例子可能更容易解释:

目前我有:

public interface IMyContext
{
    IDbSet<UserProfile> Users { get; set; }
}

public class UserModel
{
    IMyContext myContext;

    UserModel(IMyContext myContext) 
    {
       this.myContext = myContext;
    }

    UserProfile GetUser(int id)
    {
       return myContext.Users.Where(u => u.id == id);
    }
}

我不确定如何在没有正在运行的数据库的情况下测试 UserModel 代码。我知道我可以模拟 MyContext - 但代码 myContext.Users.Where ... 可能涉及复杂的模拟?我的代码结构有误吗?我如何在没有测试数据库的情况下为模型编写测试?还是我应该伪造上下文?

谢谢!

最佳答案

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

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

因此,只需模拟您的上下文,当 .Users 时被调用,它返回一个 IDbSet<UserProfile>自己做的

关于c# - 如何测试 EF 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11437708/

相关文章:

c# - 即将到来的 GCM 响应是 : Error=NotRegistered

C# 相当于 Java 实例初始化器

c# - 数据库规范化和重复值

c# - 将 WebClient 错误作为字符串获取

asp.net-mvc-3 - 将客户端复选框单击处理程序添加到 Razor View

unit-testing - 使用每个值调用的 PHPUnit 断言方法

c# - 在 Entity Framework 中获取导致保存更改异常的字段

c# - ASP.NET MVC 3.0 的学习资料?请列出!

ruby-on-rails - 在 Rails 测试中处理非用户数据

testing - 删除 Clojure REPL 中定义的测试