2016-02-22 76 views
1

我想弄清楚为什么当我嘲笑我非常简单的接口时,我得到以下异常。Moq - 参数不匹配

System.Reflection.TargetParameterCountException:参数计数 不匹配。

var zoneLocator = new Mock<IZoneLocator<ZoneInfo>>(); 
    zoneLocator 
     .Setup(zl => zl.GetZoneInfo(
      It.IsAny<double>(), It.IsAny<double>())) 
     .Returns((ZoneInfo zoneInfo) => 
      Task.FromResult(zoneInfo)); 

    var z = zoneLocator.Object.GetZoneInfo(1, 1); 

接口:

public interface IZoneLocator<T> 
{ 
    Task<T> GetZoneInfo(double latitude, double longitude); 
} 

回答

3

Returns期望一个Func过载期待具有相同的输入作为模拟的方法的输入的函数。这使您可以根据方法的输入更改返回值。

因此,要解决这个问题,你的设置改成这样:

zoneLocator 
    .Setup(zl => zl.GetZoneInfo(It.IsAny<double>(), It.IsAny<double>())) 
    .Returns((double latitude, double longitude) => 
     Task.FromResult(/* TODO: create a timezone somehow*/));