c# - RhinoMock 中带有 stub 的可选参数

标签 c# visual-studio rhino-mocks optional-parameters stubs

我想 stub 一个接收 2 个 bool 参数的函数。第一个是必需的,第二个是可选的。如果我尝试将 Arg.Is.Anything 发送到第一个但没有第二个信息,我会收到错误消息:

System.InvalidOperationException:使用 Arg 时,必须使用 Arg.Is、Arg.Text、Arg.List、Arg.Ref 或 Arg.Out 定义所有参数。预期有 2 个参数,已定义 1 个。

这是我要 stub 的类的示例:

   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) 相同的信息或特定的 bool 值,如 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 就不会提示。

只要在您的测试中明确说明第一个参数的值不相关,您的测试就是有效且可读的。

关于c# - RhinoMock 中带有 stub 的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9894886/

相关文章:

c# - 模拟 NHibernate IQueryOverOrderBuilder 对象

c# - FileSystemWatcher 两次引发事件

c# - 如何使用 Serilog 在 Json 中获取日志级别 - .NET Core 3.1

c# - 从数据库中填充数据时,如何在下拉列表中添加选项 "Any"?

visual-studio - Visual Studio - 合并 .cs 文件的构建后事件

c# - 无法在 gridview 中访问 TextArea 中的文本

c# - CaSTLe DynamicProxy - 创建涉及用作 GTR 的 GTP 的代理时失败

asp.net - 在 ASP.net 中模拟 HttpSessionState 以进行 nunit 测试

c# - 下拉列表中的项目

c# - 是否有适用于无括号 C# 的 IDE 或 Visual Studio/Mono/SharpDevelop 插件?