InMemoryDb单元测试异常

本文关键字:异常 单元测试 InMemoryDb | 更新日期: 2023-09-27 17:49:35

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

InMemoryDb单元测试异常

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

至于你得到的错误,Setup方法需要一个表达式导致方法(或属性getter)调用,但你已经提供了一个"实例"结果表达式。例如:

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