我想存根一个接收2个布尔参数的函数.第一个是必需的,第二个是可选的.如果我尝试将Arg.Is.Anything发送到第一个但没有第二个信息,我收到一个错误:
system.invalidOperationException:使用Arg时,必须使用Arg.Is,Arg.Text,Arg.List,Arg.Ref或Arg.Out定义所有参数.预期有2个参数,1个已被定义.
这是我的类到存根的示例:
public interface IOptionalParameterTester { bool IsValid(bool mustCheck,bool checkInDatabase = true); } public class OptionalParameterTester : IOptionalParameterTester { public bool IsValid(bool mustCheck,bool checkInDatabase = true) { if (checkInDatabase) return true; else return false; } }
以下是测试样本:
[Test] public void ValidateProducertest() { IOptionalParameterTester optionalParameter = MockRepository.GenerateStub<IOptionalParameterTester>(); optionalParameter.Stub(x => x.IsValid(Arg<bool>.Is.Anything)).Return(true); }
在这种情况下,如果我希望测试无错误地传递,我必须为第一个(Arg.Is.Anything)或特定的布尔值(如true或false)定义相同的信息.
如果我为第一个参数设置了除Arg.Is.Anything之外的任何内容,我没有任何错误.
我可以在RhinoMock中设置一个选项,而不必为每个可选参数定义一个值吗?
如果没有设置,是否有更好的办法来处理这种情况(最佳实践,模式等)?
谢谢.
解决方法
我想我明白你要做什么但是,因为看起来这是Rhino Mocks的限制(我们可以从你收到的错误信息中得出结论)我建议改变你的测试策略.
尝试执行以下操作:
[Test] public void ValidateProducertest() { bool anyBooleanValue = true; IOptionalParameterTester optionalParameter = MockRepository.GenerateStub<IOptionalParameterTester>(); optionalParameter.Stub(x => x.IsValid(anyBooleanValue)).Return(true); }
我知道在你的测试中你希望Rhino Mocks忽略第一个参数并且它需要可选的第二个参数,但是,根据你要测试的逻辑,只需硬编码第一个参数,Rhino Mocks不应该抱怨.
只要在您的测试中明确指出第一个参数的值不相关,您的测试就是有效且可读的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。