簡體   English   中英

InMemoryDb單元測試異常

[英]InMemoryDb unit test exception

我嘗試為存儲庫編寫單元測試。 我使用設置為模擬DbSet的InMemoryDb( https://www.nuget.org/packages/FakeDbSet )但出現異常

“表達式不是方法調用: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實例的方法/構造函數即可。

對於您得到的錯誤,Setup方法需要一個表達式,該表達式導致方法(或屬性getter)的調用,但是您提供了一個“實例”結果表達式。 例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM