【问题标题】:NSubstitute with delegates, checking received calls?NSubstitute 与代表,检查收到的电话?
【发布时间】:2018-04-13 11:13:10
【问题描述】:

在接口上检查收到的呼叫时,我可以这样做:

void Main()
{
    var logger = Substitute.For<ILogger>();
    Test(logger);
    logger.Received().Log(Arg.Any<string>());
}

public void Test(ILogger logger)
{
    logger.Log("Test");
}

public interface ILogger
{
    void Log(string message);
}

如果我注释掉 logger.Log("Test"); 电话,我会得到:

ReceivedCallsException:预期会收到匹配的呼叫:
日志(任何字符串)
实际上没有接到任何匹配的电话。

但是,我最近才发现 NSubstitute 可以替代代表。问题是,我可以让它检查是否调用了委托?

void Main()
{
    var logger = Substitute.For<Action<string>>();
    Test(logger);
    // What.Received().What()?
}

public void Test(Action<string> logger)
{
    logger("Test");
}

【问题讨论】:

    标签: c# nsubstitute


    【解决方案1】:

    这个问题的答案其实很简单。

    我不是在替换“函数调用”,我当然是替换整个委托type,而不仅仅是调用语法部分。

    所以这很好用:

    logger.Received()(Arg.Any<string>());
    

    产生(只要我注释掉对代表的调用):

    ReceivedCallsException:预期会收到匹配的呼叫:
    调用(任何字符串)
    实际上没有接到任何匹配的电话。

    根据您对语法的看法,只需说明正在发生的事情就可以“更清楚”:

    logger.Received().Invoke(Arg.Any<string>());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多