假设我有一个函数需要一个复杂的对象并用它做一些事情:
def foo(bar: SomeComplexObject):
...
在单元测试bar
中将被模拟对象取代,但课程现在会引发类型警告。我应该简单地忽略或抑制这些,还是有适当的方法来处理它们(当然不改变原始函数签名)?
更新:我现在看到这是 mypy 上的一个未解决问题,但它已经处于这种状态超过两年了。有没有就如何解决这个问题达成共识?
我将投入我的 2 美分并说你应该检查你的测试套件。它的静态代码和静态类型检查将帮助您更快地编写更好的代码。
这就留下了如何做的问题。理想情况下,如果您的函数需要,SomeComplexObject
那么您也可以传入其中的一个实例。通过在您的测试夹具中构建一个,或者通过子类化和覆盖您不需要的东西。最好的单元测试是在正确输入上运行的单元测试。
这仍然存在不切实际的情况,或者我们明确想要测试如何处理无效输入。在这种情况下,只需将您的模拟显式转换为 mypy 所需的类型:
from typing import cast
def test_foo():
mock_bar = cast(SomeComplexObject, MockBar())
foo(mock_bar)