1

我试图弄清楚如何通过 TDD 编写实体框架代码优先代码。我发现这很难,因为我没有像过去使用 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 ... 可能涉及复杂的模拟?我的代码结构错了吗?如何在没有测试数据库的情况下为模型编写测试?还是我应该伪造上下文?

谢谢!

4

1 回答 1

0

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

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

因此,只需以这样一种方式模拟您的上下文,即当.Users被调用时,它会返回IDbSet<UserProfile>您制作的

于 2012-07-11T17:06:57.923 回答