InMemoryDb单元测试异常

时间:2015-05-18 07:02:37

标签: c# .net entity-framework unit-testing mockdbset

我尝试为存储库编写单元测试。我使用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);
        }

1 个答案:

答案 0 :(得分:1)

InMemoryDbSet已经实现了IDbSet,因此您无需对其进行模拟。 只需将userDbSet传递给需要IDbSet实例的方法/构造函数。

对于您获得的错误,Setup方法需要一个表达式,该表达式会导致方法(或属性getter)调用,但您提供了“实例”结果表达式。 例如。应该是:

var repositoryMock = new Mock<IDbSet<UserModel>>();
repositoryMock.Setup(p => p.SomeMethod()).Returns(() => stubData);