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

如何在Rhino.Mocks中使用Stub模拟系统注册表函数

解决Rhino Mocks模拟RegistryKey时GetValue不返回预设值的问题

你的问题核心是模拟的RegistryKey实例没有被传入GetAppRegistryPath方法的执行上下文,方法内部实际使用的并非你Stub的对象,因此不会返回预设值。按以下步骤修复:

  • 第一步:让_mock的RegistryKey依赖可替换
    如果GetAppRegistryPath内部是通过_mock的某个成员方法(比如GetRootRegistryKey())获取RegistryKey,需要先Stub这个方法,让它返回你创建的模拟对象:

    // 创建模拟的RegistryKey实例
    RegistryKey mockRegistry = MockRepository.GenerateMock<RegistryKey>();
    // Stub _mock中获取RegistryKey的方法,返回模拟对象
    _mock.Stub(x => x.GetRootRegistryKey()).Return(mockRegistry);
    
  • 第二步:正确Stub GetValue方法
    若要匹配任意参数,使用IgnoreArguments()时无需指定具体keyName:

    mockRegistry.Stub(x => x.GetValue(null)).IgnoreArguments().Return("123");
    

    若只需匹配特定keyName,则去掉IgnoreArguments():

    mockRegistry.Stub(x => x.GetValue(keyName)).Return("123");
    
  • 第三步:验证模拟对象的调用(可选)
    执行方法后,可验证GetValue是否被正确调用,确认模拟是否生效:

    mockRegistry.AssertWasCalled(x => x.GetValue(keyName));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:17:06