c# - N用代表代替,检查收到的电话?

标签 c# nsubstitute

在接口(interface)上检查接收到的调用时,我可以这样做:

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: Expected to receive a call matching:
Log(any String)
Actually received no matching calls.

然而,我最近才发现 NSubstitute 可以替代委托(delegate)。问题是,我能否让它检查委托(delegate)是否被调用?

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

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

最佳答案

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

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

所以这很好用:

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

产生(假设我注释掉了对委托(delegate)的调用):

ReceivedCallsException: Expected to receive a call matching:
Invoke(any String)
Actually received no matching calls.

根据您对语法的看法,只需拼出正在发生的事情,它就可以变得“更清晰”:

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

关于c# - N用代表代替,检查收到的电话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815683/

相关文章:

c# - 查找 Selenium C# 的 CSS 选择器路径

c# - 使用 Windows 用户帐户凭据登录

c# - IIS 文件锁定 - 该进程无法访问该文件,因为它正被另一个进程使用

c# - C# 中使用 Parallel.For 进行锁定的意外行为

c# - NSubstitute:使用数组参数检查接收到的方法

c# - C#并行ForEach保持值

c# - 无法确定要使用的参数规范

testing - NSubstitute 模拟 NLog 记录器失败

c# - 使用 NSubstitute 将 Arg.Any<int>() 作为参数传递时出现 NullReferenceException