![](/img/trans.png)
[英]Rhino mocks is unable to set an expectation on the 2nd call of mocked object whose interface returns a Func<T>
[英]Unable to verify a call to a method on the mocked object with multiple interface
我正在嘗試為TranslateResponse()
編寫單元測試。
private async Task TranslateResponse(Policy policy)
{
foreach(t in translatorFactory.BuildTranslator())
{
var policyTranslator=t as IPolicyAwareTranslator;
policyTranslator?.SetPolicy(policy);
}
}
雖然TranslateResponse()
有許多其他翻譯器,但現在我將其限制為只有一個。 BuildTranslator
是
public async Task<List<ITranslator>> BuildTranslators()
{
return new List<ITranslator>()
{
new PolicyTranslator()
}
}
在這里,我返回了實現ITranslator
和PolicyTranslator
的IPolicyAwareTranslator
ITranslator
具有Translate()
而IPolicyAwareTranslator
分別具有SetPolicy(Policy policy)
。 現在,對於單元測試,我創建了一個ITranslator
的 Mock 並進行了設置,然后我通過 As<> 創建了IPolicyTranslator
的 Mock。
Mock<ITranslator> mockedTranslator=new Mock<ITranslator>();
mockedTranslator.Setup(t => t.Translate(_translatorDataAccessor.Object));
var mockedPolicyTranslator = mockedTranslator.As<IPolicyAwareTranslator>();
mockedPolicyTranslator.Setup(t => t.SetPolicy(It.IsAny<Policy>()));
List<ITranslator> translators = new List<ITranslator>(new List<ITranslator>() { mockedTranslator.Object });
translatorFactory.Setup(t => t.BuildTranslators(It.IsAny<string>())).ReturnsAsync(translators);
驗證調用仍然失敗。 我是朝着正確的方向前進還是錯過了什么?
mockedPolicyTranslator.Verify(t => t.SetPolicy(new UnknownPolicy()), Times.AtLeastOnce);
需要放松參數匹配器
mockedPolicyTranslator.Verify(t => t.SetPolicy(It.IsAny<UnknownPolicy>()), Times.AtLeastOnce);
因為當前使用new UnknownPolicy()
實例與測試時傳遞的內容不匹配
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.