【问题标题】:Testing: insert value passed into Action<T>测试:将值插入到 Action<T>
【发布时间】:2011-03-15 04:45:52
【问题描述】:

如何使用 Rhino Mocks 将值插入到动作中?

Register() 执行分配给稍后在函数中使用的局部变量的操作:

var result = EnumResult.Timeout;

something.Register<EnumResult>(r => result = r);

<do things with result which need to be unit tested>

我希望能够将一个值作为 r 注入到操作中(因为它在函数中定义)并测试之后会发生什么。

【问题讨论】:

  • @I Clark 你能解释一下你的测试场景吗?当您无法从测试环境访问该局部变量时,似乎您在询问如何将名为 result 的局部变量打包到 lambda 中。我想如果这是一个纯粹的模拟场景,我想知道为什么需要调用 lambda - 似乎需要以某种形式或形式验证参数;类似于 Expect.Call(()=>mockedSomething.Register(null)).Constraints(Is.Matching>(c=>c.YourVerificationCodeHere));我在正确的轨道上吗?
  • @J Trana:嗨。我希望能够控制在我的单元测试中Register() 的回调操作中分配给 resultr 的值。我不是在测试 Register() 函数本身,而是在分配 result 之后执行的操作。 RE:调用:这是我运行测试而不是抛出 null 异常的唯一方法。

标签: c# unit-testing rhino-mocks action


【解决方案1】:

难道你不能在你的测试中传递一个 lambda 来设置一些变量,然后验证这个变量是在测试结束时设置的吗?像这样的:

var wasCalled = false;
mock.Stub(s => s.Register(r => wasCalled = true);
...
Assert.IsTrue(wasCalled);

这将确保您的“注册”方法正在调用传递给它的 lambda。

【讨论】:

  • 感谢您的回答。不幸的是,我最初的问题没有问我想问什么,我已经重新设计了它。你介意再看看吗?
  • 即使基于您的编辑,我仍然认为我的代码示例显示了您的要求:设置局部变量的存根。也许如果您将“某物”类的定义与您目前拥有的单元测试一起展示,我们可以提供更有价值的答案。
猜你喜欢
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多