@Jakub建議的github頁面實際上是一個很好的開始。
無論哪種方式,我會解釋你發佈的例子。 說你有這個接口和這個設置:
public interface IDao
{
IEnumerable<ConfigurationEntity> Get(Expression<Func<ConfigurationEntity, bool>> expression) {...}
}
var daoMock = new Mock<IDao>();
daoMock.Setup(d => d.Get(It.Is<Expression<Func<ConfigurationEntity, bool>>>(e => ExpressionMatchesEntityWithKey(e, TestKey))))
.Returns(new List<ConfigurationEntity> {configEntity});
這個設置告訴模擬返回包含列表configEntity
當:
- 的
Get
方法被稱爲
- 用的參數鍵入
Expression<Func<ConfigurationEntity, bool>>
- 和
ExpressionMatchesEntityWithKey(e, TestKey)
(其中e
是作爲n參數)返回true。
所以,基本上,當你調用Get
方法的嘲笑對象,起訂量將檢查的說法是正確的類型,檢查是否ExpressionMatchesEntityWithKey(e, TestKey)
返回true,然後用configEntity
返回一個列表。
默認情況下,如果沒有滿足任何這些要求,模擬對象將返回IEnumerable<ConfigurationEntity>
的默認值,即null
。
現在,您可以檢索嘲笑的對象,並隨心所欲地做任何事情。
IDao dao = daoMock.Object;
我建議檢查文檔。這裏有一個很好的例子:https://github.com/Moq/moq4/wiki/Quickstart – Jakub
@Jakub太短評論。 「//匹配Func,懶惰評估' - 看在上帝的份上,'懶惰評估'在哪一行? –
@AskarIbragimov大概他們的意思是'Func'不是直接叫出來的。 –