InMemoryDb 单元测试异常
InMemoryDb unit test exception
我尝试为存储库编写单元测试。我使用 InMemoryDb (https://www.nuget.org/packages/FakeDbSet) 设置为模拟 DbSet 但出现异常
"Expression is not a method invocation: 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);
}
InMemoryDbSet 已经实现了 IDbSet,所以您不需要模拟它。
只需将 userDbSet 传递给需要 IDbSet 实例的 method/constructor。
至于您遇到的错误,Setup 方法需要一个导致方法(或 属性 getter)调用的表达式,但您提供了一个 "instance" 结果表达式。
例如。应该是:
var repositoryMock = new Mock<IDbSet<UserModel>>();
repositoryMock.Setup(p => p.SomeMethod()).Returns(() => stubData);
我尝试为存储库编写单元测试。我使用 InMemoryDb (https://www.nuget.org/packages/FakeDbSet) 设置为模拟 DbSet 但出现异常
"Expression is not a method invocation: 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);
}
InMemoryDbSet 已经实现了 IDbSet,所以您不需要模拟它。 只需将 userDbSet 传递给需要 IDbSet 实例的 method/constructor。
至于您遇到的错误,Setup 方法需要一个导致方法(或 属性 getter)调用的表达式,但您提供了一个 "instance" 结果表达式。 例如。应该是:
var repositoryMock = new Mock<IDbSet<UserModel>>();
repositoryMock.Setup(p => p.SomeMethod()).Returns(() => stubData);