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

