小编Mar*_*ith的帖子

Moq测试LINQ哪里有查询

我正在使用EF 4.1来构建域模型.我有一个带有Validate(字符串userCode)方法的Task类,在其中我想确保用户代码映射到数据库中的有效用户,因此:

public static bool Validate(string userCode)
{
    IDbSet<User> users = db.Set<User>();
    var results = from u in users
              where u.UserCode.Equals(userCode)
              select u;
    return results.FirstOrDefault() != null;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用Moq来模拟IDbSet没问题.但是在Where调用时遇到了麻烦:

User user = new User { UserCode = "abc" };
IList<User> list = new List<User> { user };
var users = new Mock<IDbSet<User>>();
users.Setup(x => x.Where(It.IsAny<Expression<Func<User, bool>>>())).Returns(list.AsQueryable);

Initialization method JLTi.iRIS3.Tests.TaskTest.SetUp threw exception.
System.NotSupportedException: System.NotSupportedException: Expression 
references a method that does not belong to the mocked object:
x => x.Where<User>(It.IsAny<Expression`1>()).
Run Code Online (Sandbox Code Playgroud)

除了创建一个间接级别(例如,使用ServiceLocator来获取运行LINQ的对象然后模拟该方法)之外,我想不出怎么测试这个,但我想确保以前没办法我介绍另一层.而且我可以看到经常需要这种LINQ查询,因此服务对象很快就会失控.

某种灵魂有帮助吗?谢谢!

linq tdd unit-testing moq entity-framework-4.1

15
推荐指数
3
解决办法
2万
查看次数

标签 统计

entity-framework-4.1 ×1

linq ×1

moq ×1

tdd ×1

unit-testing ×1