我尝试为存储库编写单元测试。我使用InMemoryDb(https://www.nuget.org/packages/FakeDbSet)设置为模拟DbSet但我得到异常
"表达式不是方法调用:p => P"
我错了什么?
try
{
var userDbSet = new InMemoryDbSet<UserModel>();
userDbSet.Add(new UserModel { Id = 1, Username = "jacek_001@wp.pl" });
userDbSet.Add(new UserModel { Id = 1, Username = "jacek_002@wp.pl" });
userDbSet.Add(new UserModel { Id = 1, Username = "jacek_003@wp.pl" });
var repositoryMock = new Mock<IDbSet<UserModel>>();
repositoryMock.Setup(p => p).Returns(() => userDbSet); // <= this line throw exception
var entitiesMock = new Mock<Entities>();
entitiesMock.Setup(p => p.Users).Returns(() => repositoryMock.Object);
return entitiesMock.Object;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
答案 0 :(得分:1)
InMemoryDbSet已经实现了IDbSet,因此您无需对其进行模拟。 只需将userDbSet传递给需要IDbSet实例的方法/构造函数。
对于您获得的错误,Setup方法需要一个表达式,该表达式会导致方法(或属性getter)调用,但您提供了“实例”结果表达式。 例如。应该是:
var repositoryMock = new Mock<IDbSet<UserModel>>();
repositoryMock.Setup(p => p.SomeMethod()).Returns(() => stubData);