【问题标题】:Mocking one method of an object模拟对象的一种方法
【发布时间】:2015-01-11 09:47:31
【问题描述】:

我有一个类PhotoOrganiser,并且正在尝试对其方法SortAll 进行单元测试。该方法调用类中的另一个方法MovePhoto

解决这个问题的正确方法是什么?使用 Moq,我已经模拟了其他类 SortAll 引用,但据我所知,没有办法在不模拟对象本身的情况下模拟对象上的一种方法。最简单的方法是创建一个覆盖MovePhoto 的新子类吗?

【问题讨论】:

  • github.com/Moq/moq4/wiki/Quickstart ctrl-f 表示“部分”
  • Zerkms 是对的。您正在寻找的是部分模拟Moq 支持。
  • 谢谢大家,我错过了。那么这样做,我将不得不使方法覆盖虚拟?纯粹出于测试目的(而不是在程序本身中使用)这样做是否被认为是一种好的做法?
  • @tsvallender 我在必要时使用部分模拟。不确定它是否被社区认为是好还是坏:-)
  • IMO:不要。您正在像任何消费者一样使用其公共 API 测试该类,因此请相应地测试逻辑。不要测试“方法方法”,而是通过调用/行为来测试。试一试 TDD,这正是你最终要做的。

标签: c# unit-testing mocking moq


【解决方案1】:

您不需要模拟MovePhoto。您的 SortAll 方法听起来应该很容易断言、可观察的结果(正在排序的照片)。

我建议重新审视您的设计。也许PhotoOrganizer 类太复杂了?也许 moving photo 足够大,值得拥有自己的课程?考虑在 SortAll 方法中内联 MovePhoto 用法时会发生什么。我意识到 PhotoOrganizer 考虑到应用程序的目的似乎是一个好名字,但在 OOP organizer 中可能会尖叫 SRP 违规。 hard to write unit tests 通常会很快突出设计问题。

所有事情都认为你可以用其他人提到的部分模拟来解决它(是的,它需要方法是虚拟的)。但这是治标不治本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多