簡體   English   中英

無法驗證對具有多個接口的模擬 object 上的方法的調用

[英]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()
   }
}

在這里,我返回了實現ITranslatorPolicyTranslatorIPolicyAwareTranslator

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM