【问题标题】: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