You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NSubstitute捕获方法调用中的多个参数?

用NSubstitute捕获多参数方法的调用参数

如果你的方法包含多个参数,想要捕获调用时的参数,有两种常用方案:

方案1:捕获单次调用的单个参数值

针对每个参数单独使用Arg.Do<T>(),直接将参数值赋值给变量:

// 假设目标方法是 void SomeMethod(int num, string text, bool flag)
int? receivedNum = null;
string? receivedText = null;
bool? receivedFlag = null;

// 为每个参数绑定捕获逻辑
substitute.SomeMethod(
    Arg.Do<int>(num => receivedNum = num),
    Arg.Do<string>(text => receivedText = text),
    Arg.Do<bool>(flag => receivedFlag = flag)
);

// 调用目标方法后,变量会被赋值为对应的参数值

方案2:捕获所有调用的参数组合(支持多次调用)

如果需要记录方法每次调用的完整参数集合,可以结合When()和Do(),通过CallInfo对象获取所有参数:

用元组存储参数(简洁方式)

var receivedCalls = new List<(int, string, bool)>();

substitute.When(x => x.SomeMethod(Arg.Any<int>(), Arg.Any<string>(), Arg.Any<bool>()))
          .Do(callInfo => 
              receivedCalls.Add((
                  callInfo.Arg<int>(0),   // 按索引获取第1个参数
                  callInfo.Arg<string>(1),// 按索引获取第2个参数
                  callInfo.Arg<bool>(2)   // 按索引获取第3个参数
              ))
          );

// 多次调用方法后,receivedCalls会保存每一次调用的参数组合

用自定义类存储参数(适合复杂参数场景)

如果参数数量多或者类型复杂,建议定义专门的类来封装参数:

// 定义参数封装类
public class SomeMethodArgs
{
    public int Number { get; set; }
    public string Text { get; set; } = string.Empty;
    public bool Flag { get; set; }
}

var receivedCalls = new List<SomeMethodArgs>();

substitute.When(x => x.SomeMethod(Arg.Any<int>(), Arg.Any<string>(), Arg.Any<bool>()))
          .Do(callInfo => 
              receivedCalls.Add(new SomeMethodArgs {
                  Number = callInfo.Arg<int>(0),
                  Text = callInfo.Arg<string>(1),
                  Flag = callInfo.Arg<bool>(2)
              })
          );

另一种获取参数的方式(通过参数数组)

你也可以通过CallInfo.Args()获取所有参数的数组,再强转成对应类型:

.Do(callInfo => {
    object[] args = callInfo.Args();
    int num = (int)args[0];
    string text = (string)args[1];
    bool flag = (bool)args[2];
    receivedCalls.Add((num, text, flag));
})

内容的提问来源于stack exchange,提问作者Filip Östermark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:32:52