我需要模擬一個接口來調用MSMQ,有沒有一種方法可以使用Moq來模擬真正的MSMQ場景,在隊列中有10條消息,我稱之爲嘲笑函數10次,我可以得到一個預定義的對象,在第11次我應該得到不同的返回值(例如空)?Moq根據被調用的時間設置函數返回
18
A
回答
22
起訂量現在有一個擴展方法在Moq
命名空間,這意味着你可以爲每個特定呼叫定義不同的返回值稱爲SetupSequence()
。
一般的想法是,你只需鏈接你需要的返回值。 在波紋管第一次調用的例子將返回喬的第二呼叫將返回簡:
customerService
.SetupSequence(s => s.GetCustomerName(It.IsAny<int>()))
.Returns("Joe") //first call
.Returns("Jane"); //second call
一些更多的信息here。
12
我有時用一個簡單的計數器對這樣的場景:
int callCounter = 0;
var mock = new Mock<IWhatever>();
mock
.Setup(mock => mock.SomeMethod())
.Returns(() =>
{
if (callCounter++ < 10)
{
// do something
}
else
{
// do something else
}
});
+2
好的解決方案。也可以追加'.CallBack(...)',其中省略號代表修改'callCounter'和可能的其他狀態的委託。 –
+0
這確實是一個非常出色的想法。 – hardywang
2
你也可以設置一個單獨的功能來做到這一點。你甚至可以通過函數參數,如果你想:
_serviceMock.Setup(x => x.SomeMethod(It.IsAny<String>())).Returns((String param) => getTimesCalled(param));
相關問題
- 1. 根據函數執行時間設置定時器間隔
- 2. Moq:設置不返回值的方法
- 3. 用字符串設置Moq的函數
- 4. mysql函數返回設置數據
- 5. 如何使用被調用函數的返回數據?
- 6. 根據時間設置Cookie
- 7. Moq回調調用參數
- 8. 如何使用返回數據的回調函數設置匿名塊
- 9. 根據調用參數從python函數返回多個字典
- 10. 返回回調函數的數據Node.js
- 11. Moq - 需要模擬函數返回值
- 12. 返回函數被調用時的線程錯誤
- 13. GLFW設置回調函數
- 14. 爲每個方法調用使用設置回調MOQ
- 15. 時間戳函數不返回時間
- 16. 時間函數只返回時間
- 17. 根據調用哪個事件處理函數的函數返回值
- 18. 如何根據輸入返回調用另一個函數的函數?
- 19. 根據用戶時區設置設置Codeigniter時間戳
- 20. 被調用後,被調用的函數如何返回給調用者?
- 21. 使用回調函數返回函數
- 22. 根據數據庫中的時區設置時間
- 23. 當調用返回返回函數的函數的函數時,如何獲取底部的數據?
- 24. JS:如何使用返回類型的回調函數來返回主被調用函數
- 25. Python:如何在函數調用期間多次返回數據
- 26. Moq和訪問被調用的參數
- 27. 什麼影響函數返回給調用者的時間。
- 28. 從javascript函數返回而不等待被調用函數
- 29. moq返回dataReader
- 30. 從函數返回函數而不調用返回函數
這確實是我一直在尋找:)真棒。 – Silwing
這甚至更好! – hardywang
它看起來像鏈接是無關緊要的:/ – reddy