NS代理与代表,检查接到的电话?

时间:2018-04-13 11:13:11

标签: c# nsubstitute

在接口上检查已接来电时,我可以这样做:

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");
}

1 个答案:

答案 0 :(得分:3)

答案实际上非常简单。

我没有替换&#34;函数调用&#34;,我当然会替换整个代理类型,而不仅仅是调用语法部分。

所以这很好用:

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

生成(假设我将对该代表的调用注释掉):

  

ReceivedCallsException:预计会收到一个匹配的电话:
      调用(任何字符串)
  实际上没有收到匹配的电话。

根据您对语法的看法,可以制作#34;更清晰&#34;通过简单说明发生的事情:

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