我正在尝试弄清楚如何通过 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/