如何使用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
相关产品推荐
相关产品推荐

