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

如何使用Moq验证init属性初始化器的调用?

验证接口中init属性初始化器的调用情况

可行,但要根据你的测试场景选择对应的实现方式:

  • 使用模拟框架(如Moq)验证接口实现的调用
    如果你是在单元测试中验证依赖接口的代码是否正确设置了Text属性,可以用支持init-only属性的模拟框架(比如Moq 4.16及以上版本)。示例代码如下:

    // 定义你的接口
    public interface IMyInterface
    {
        public string Text { init; }
    }
    
    // 测试代码
    var mock = new Mock<IMyInterface>();
    // 设置预期:Text属性被设置为"targetValue"
    mock.SetupSet(x => x.Text = "targetValue").Verifiable();
    
    // 执行会触发属性初始化的代码,比如:
    var interfaceObj = mock.Object;
    interfaceObj.Text = "targetValue"; // 或者通过对象初始化器语法
    
    // 验证是否符合预期
    mock.Verify();
    

    这里本质是验证编译器为init属性生成的特殊set方法是否被传入指定参数调用。

  • 直接验证具体实现类的属性值
    如果是针对实现该接口的具体类,不需要追踪调用过程的话,直接初始化对象后检查Text属性的取值是否为预期值即可,这是更简单的验证方式:

    public class MyClass : IMyInterface
    {
        public string Text { get; init; }
    }
    
    // 验证代码
    var obj = new MyClass { Text = "expected" };
    Assert.Equal("expected", obj.Text);
    
  • 限制说明
    要是你无法控制目标对象的创建(比如第三方类库中的实现),没法通过模拟或拦截的方式追踪调用过程,只能通过检查属性最终值来间接验证是否被设置了特定参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:21:00