![](/img/trans.png)
[英]C# unit test for POST method that uses DB context with 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.