代码之家  ›  专栏  ›  技术社区  ›  Sailing Judo

如何将4个以上的参数传递给FakeiTasy Invokes()?

  •  0
  • Sailing Judo  · 技术社区  · 6 年前

    我正在尝试转换一个我用mocking编写的助手方法 ILogger 用最小起订量来伪装。这个 Log() 伊洛格

    Log(LogLevel, EventId, FormattedLogValues, Exception, Func<object, Exception, string>)
    

    docs ):

    // Pass up to 4 original call argument values into the method that creates the exception.
    A.CallTo(()=>fakeShop.NumberOfSweetsSoldOn(A<DateTime>._))
      .Invokes((DateTime when) => System.Console.Out.WriteLine("showing sweet sales for " + when))
      .Returns(17);
    

    var logs = new List<string>();
    var logger = A.Fake<ILogger<ElasticSearchRepository>>();
    A.CallTo(() => logger.Log(A<LogLevel>._, A<EventId>._, A<FormattedLogValues>._, A<Exception>._, A<Func<object, Exception, string>>._))
        .Invokes((LogLevel a, EventId b, FormattedLogValues x, Exception c, Func<object, Exception, string> d) => logs.Add(x.ToString()));
    

    ... 我得到以下错误

     Delegate 'Action<IFakeObjectCall>' does not take 5 arguments
    

    有什么我应该做的不同吗?很难想象有人任意选择4作为可以传递的最大参数,所以我猜这是有原因的。最小起订量 Callback()

    1 回复  |  直到 6 年前
        1
  •  2
  •   Sailing Judo    6 年前

    Fakeitesy似乎将争论的数量限制为4个。

    不是真的。最多可以有4个参数的帮助器重载,但实际上可以有任意数量的参数,尽管语法不太方便:

    A.CallTo(() => logger.Log(A<LogLevel>._, A<EventId>._, A<FormattedLogValues>._, A<Exception>._, A<Func<object, Exception, string>>._))
        .Invokes(call => logs.Add(call.GetArgument<FormattedLogValues>("state").ToString()));