我的可測試函數使用EF.Find()so,因為我發現我需要實現 find 的模擬。似乎被編譯的唯一代碼是c#testsContextMock.Setup(m => m.Find(It.IsAny<Type>(), It.IsAny<object[]>()))
.Returns<object[]>(hashes => testsMock.Object.FirstOrDefault(u => u.hash == (string)hashes[0]))其中testsContextMock是Mock<DbContext>對象,并且testsMock是Mock<DbSet<MyEntity>>。但是完成此代碼后我收到此錯誤System.ArgumentException : Invalid callback.
Setup on method with 2 parameter(s) cannot invoke callback
with different number of parameters (1).正如我假設發生這種情況的原因是調用的可測試方法簽名Find()是DbSet<MyEntity>.Find(params object[] keyValues)和模擬方法的簽名是DbContext.Find(Type entityType, params object[] keyValues)。如果我嘗試模擬其他重載,它會因編譯器錯誤而失敗 Argument 1: cannot convert from 'object[]' to 'System.Type'
如何通過 Moq 從 EF 模擬 Find()
慕田峪9158850
2023-09-24 17:18:41