【问题标题】:How to mock Pythonic way?如何模拟 Pythonic 方式?
【发布时间】:2011-11-16 12:30:31
【问题描述】:

Mox 模拟库允许您对所模拟的类进行特定或不可知论。

  1. mock = mox.CreateMock(Foo)
  2. mock = mox.CreateMockAnything()

Mox 文档建议尽可能使用第一种方法(基本上检查模拟的类型)。 Python 作为一种动态语言与类型无关。这两种方法在我看来不一致。

那么,哪种模拟方法更符合 Python 风格?

【问题讨论】:

    标签: python unit-testing mocking mox


    【解决方案1】:

    它们不一样。来自documentation

    有些类不提供公共接口;例如,他们可能 使用__getattribute__ 动态创建他们的界面。对于这些 类,您可以使用MockAnything。它不强制执行任何 接口,所以任何你内心渴望的呼叫都是有效的。它适用于 相同的记录-重放-验证范式。 不要使用这个,除非你 绝对必须!你可以创建一个MockAnything CreateMockAnything Mox 实例的方法如下:

    相比之下,当使用CreateMock(Foo) 创建模拟时,调用未知方法时会出现异常。

    【讨论】:

    • @Alex:感谢回答的最佳方式是使用左侧的勾号接受它。这将奖励回答者 15 点声望点,并告诉其他读者此答案解决了您的问题/回答了您的问题。
    • 抱歉,我按 Enter 太早了。对我来说,问题在于 Mox 文档和 Python 本身之间的范式不一致。 Python 明确不知道方法参数的类型。 Mox 文档表明,duck-typing 是不够的,并且尽可能坚持使用静态类型。请您对此发表评论吗?
    • 也许只是模拟你期望的界面
    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多