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

如何验证作为方法参数传入的Action对Status属性的设置?

验证NSubstitute中传入的Action委托行为

你可以通过捕获传入的Action委托并执行它,然后检查目标对象的属性变化来实现验证。具体步骤如下:

1. 捕获传入的Action

使用NSubstitute的Arg.Do<T>方法,在UpdateStatus被调用时,获取传入的Action<Status>委托。

2. 执行Action并验证结果

创建一个Status实例,将其传入捕获到的Action中执行,然后检查该实例的XReceived属性是否被设置为Received状态。

完整测试代码

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void UpdateX_SetsXReceivedToReceived()
    {
        // Arrange
        var mockHandler = Substitute.For<IHandler>();
        var sequencer = new Sequencer(mockHandler);
        Status testStatus = new Status();
        Action<Status> capturedAction = null;

        // 捕获传入的Action
        mockHandler.When(h => h.UpdateStatus(Arg.Any<Action<Status>>()))
                   .Do(callInfo => capturedAction = callInfo.Arg<Action<Status>>());

        // Act
        sequencer.UpdateX();

        // Assert
        // 执行捕获到的Action
        capturedAction(testStatus);
        // 验证属性是否被正确设置
        Assert.AreEqual(Status.ReceivedStatus.Received, testStatus.XReceived);
        // 同时可以验证UpdateStatus确实被调用过
        mockHandler.Received().UpdateStatus(Arg.Any<Action<Status>>());
    }
}

代码说明

  • mockHandler.When(...):监听UpdateStatus方法的调用,当方法被触发时,通过callInfo.Arg<Action<Status>>()获取传入的委托并保存到capturedAction变量中。
  • 执行capturedAction(testStatus):模拟Handler内部调用Action的行为,让作用于我们自己创建的testStatus实例上。
  • 最后断言testStatus.XReceived的值,确认Action的逻辑符合预期。

如果要测试UpdateY方法,只需要把测试方法中的sequencer.UpdateX()换成sequencer.UpdateY(),然后断言testStatus.YReceived即可。

内容的提问来源于stack exchange,提问作者GraySquid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:03:22