在单元测试中嘲讽对象时避免类型警告?

问题描述 投票:5回答:1

假设我有一个函数,它接收一个复杂的对象,并对它做一些事情。

def foo(bar: SomeComplexObject):
    ...

在单元测试中 bar 将被替换为 拟物但现在当然会引起类型警告。我应该简单地忽略或抑制这些警告,还是有一个适当的方法来处理它们(当然是在不改变原始函数签名的情况下)?

更新。 我现在看到这是一个 未决问题 但它已经处于这种状态两年多了。对于如何解决这个问题,有什么共识吗?

python python-unittest mypy python-unittest.mock
1个回答
1
投票

我要把我的2分钱,并说,你 类型检查你的testuite。它仍然是代码,静态类型检查将帮助你更快地写出更好的代码。

这就留下了怎么写的问题。理想情况下,如果你的函数期望 SomeComplexObject 然后你也要传入一个实例。无论是通过在你的测试装置中建立一个,还是通过子类化和覆盖你不需要的东西。最好的单元测试是对正确的输入进行操作。

这仍然留下了这样的情况,即这是不切实际的,或者我们明确地想要测试如何处理无效的输入。在这种情况下,只需显式地将你的mock投向mypy需要的类型。

from typing import cast

def test_foo():
    mock_bar = cast(SomeComplexObject, MockBar())
    foo(mock_bar)
© www.soinside.com 2019 - 2024. All rights reserved.