是否可以修改模擬方法的調用參數?具體而言,我期待在以下示例中將buffer
更改爲預填充的字節數組。如何使用Moq修改模擬方法的調用參數?
實施例:
int MockedClass.Read(byte[] buffer, int offset, int count)
說明:
調用Read
負載count
字節從offset
讀入所供給的字節數組buffer
。
現在我想在我的應用程序代碼中調用Read
之後填充緩衝區。那可能嗎?
如果是,我將如何去連續調用Read
?如果可能的話,我希望每次都有連續的調用返回不同的緩衝區。
編輯:
使用Setup
命令是這樣的:
MockedClass.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()).Callback((byte[] buffer, int offset, int count) => buffer[0] = 0xAA);
執行單元測試時給我一個奇怪的問題:一旦呼叫到Read
由和委託代碼(buffer[0] = 0xAA
)執行時,調試器顯示buffer
實際上是null
,並且在執行此命令後單元測試執行停止。我的語法是borked還是一個bug?
馬克你好。感謝你的回答。如果我使用這種模式,我的單元測試只會在委託執行時回調的那一點停止。調試問題表明緩衝區字節數組爲'null'。任何想法爲什麼會發生? – 2010-02-02 13:03:39
除非您指定它,否則它爲空。上述安裝程序調用不會*分配緩衝區變量 - 它匹配現有的變量。在你的編輯中,你匹配'It.IsAny()',但是調用者仍然必須提供這個值。 –
2010-02-02 13:47:26