在接口上检查已接来电时,我可以这样做:
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");
}
答案 0 :(得分:3)
答案实际上非常简单。
我没有替换&#34;函数调用&#34;,我当然会替换整个代理类型,而不仅仅是调用语法部分。
所以这很好用:
logger.Received()(Arg.Any<string>());
生成(假设我将对该代表的调用注释掉):
ReceivedCallsException:预计会收到一个匹配的电话:
调用(任何字符串)
实际上没有收到匹配的电话。
根据您对语法的看法,可以制作#34;更清晰&#34;通过简单说明发生的事情:
logger.Received().Invoke(Arg.Any<string>());