假设我有一个函数,它接受一个复杂的对象并用它做一些事情:
def foo(bar: SomeComplexObject):
...
在单元测试中,bar
将替换为mock object,但课程现在会引发类型警告。我应该简单地忽略或压制这些或者是否有适当的方法来处理它们(当然不改变原始的功能签名)?
更新:我现在已经看到这是mypy上的open issue,但它已经在该州停留了两年多。关于如何解决这个问题已经达成共识?
答案 0 :(得分:2)
我要投入2美分,并说您应该对您的测试套件进行类型检查。它的静态代码和静态类型检查将帮助您更快地编写更好的代码。
剩下的问题是如何处理。理想情况下,如果您的函数期望使用SomeComplexObject
,那么您还应传入其实例。通过在您的测试装置中构建一个,或通过子类化并覆盖不需要的内容,要么。最好的单元测试是在正确输入下进行的测试。
这仍然不可行,或者我们明确想测试无效输入的处理方式。在这种情况下,只需将您的模拟明确转换为mypy所需的类型:
from typing import cast
def test_foo():
mock_bar = cast(SomeComplexObject, MockBar())
foo(mock_bar)