第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過 Moq 從 EF 模擬 Find()

如何通過 Moq 從 EF 模擬 Find()

C#
慕田峪9158850 2023-09-24 17:18:41
我的可測試函數(shù)使用EF.Find()so,因為我發(fā)現(xiàn)我需要實現(xiàn) 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).正如我假設(shè)發(fā)生這種情況的原因是調(diào)用的可測試方法簽名Find()是DbSet<MyEntity>.Find(params object[] keyValues)和模擬方法的簽名是DbContext.Find(Type entityType, params object[] keyValues)。如果我嘗試模擬其他重載,它會因編譯器錯誤而失敗 Argument 1: cannot convert from 'object[]' to 'System.Type'
查看完整描述

1 回答

?
慕妹3146593

TA貢獻1820條經(jīng)驗 獲得超9個贊

讓我們仔細看看被調(diào)用函數(shù)的簽名:

  1. DbContext.Find(Type entityType, params object[] keyValues)我們在模擬中得到了什么

  2. DbSet<MyEntity>.Find(params object[] keyValues)我們從方法中得到什么

這很容易看到,但不知何故我錯過了第一個參考上下文和第二個集合。所以在我的調(diào)用中而不是從上下文中查找m

testsContextMock.Setup(m => m.Find(It.IsAny<Type>(), It.IsAny<object[]>()))

我只需要從正確的DbSet中找到

testsContextMock.Setup(m => m.MyEntities.Find(It.IsAny<object[]>()))


查看完整回答
反對 回復(fù) 2023-09-24
  • 1 回答
  • 0 關(guān)注
  • 177 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號