2016-02-22 109 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*/));