【问题标题】:Override Method Return Value覆盖方法返回值
【发布时间】:2011-07-15 20:53:52
【问题描述】:

我希望对象的某个方法在运行单元测试时始终返回某个值。例如。

  • 对象 A 具有通常返回“Foo”的方法 A
  • 对象 B 实例化对象 A 并在方法 B 中调用方法 A
  • 单元测试 A 调用方法 B

在单元测试中,我希望方法 A 返回“Bar”,但在所有其他情况下,我希望返回“Foo”。

我不认为 Mocking 会起作用,因为您需要提前获得对象引用(至少对于 Moq)。有什么想法吗?

【问题讨论】:

    标签: .net unit-testing mocking


    【解决方案1】:

    如果可能,您应该将对象 A 作为依赖项传递给对象 B。然后您可以使用 Moq 模拟该依赖项,并在调用方法 A 时使其返回 Bar

    如果 A 的对象创建是在 B 内部完成的,那么对象 B 对于这部分是不可测试的(因此你应该传递你的依赖项)。

    【讨论】:

      【解决方案2】:

      模拟是用于这种场景的工具。大多数模拟框架将使您能够在不创建实例的情况下模拟对象 A。例如,来自 Microsoft 的 moles 将使您能够实现您描述的场景。

      Moles

      【讨论】:

        猜你喜欢
        • 2014-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-16
        相关资源
        最近更新 更多