gpt4 book ai didi

python - 如何在测试运行时类型检查期间模拟 Python 类?

转载 作者:行者123 更新时间:2023-12-04 03:37:24 24 4
gpt4 key购买 nike

我有一些应用程序方法使用 @typeguard.typechecked 装饰器对传递的参数执行运行时检查:

class SalesDeal:
pass

@typechecked
def do_something(deal: SalesDeal):
pass

在一个测试中,我有一个假类 FakeSalesDeal,它为 SalesDeal 实现了一个最小的模拟(这在现实中是一个非常复杂的类):

class FakeSalesDeal:
pass


def test_foo():
deal = FakeSalesDeal()
do_something(deal)

这个测试当然会失败,因为 @typechecked 装饰器会由于不同的类而引发错误。

有没有办法模拟/伪造 FakeSalesDeal 类以使测试通过?

最佳答案

您可以使用 MagicMock 并将 spec 设置为 SalesDeal 而不是创建假类。

isinstance(mock, SalesDeal) 将为该模拟对象 True & 您应该能够绕过类型检查。

from unittest.mock import MagicMock

# ...

def test_foo():
deal = MagicMock(spec=SalesDeal)
print(isinstance(deal, SalesDeal))
do_something(deal)

test_foo()

这打印:

True

& 不会抛出任何类型检查错误。

这是有效的,因为 typechecked 显式检查传递给 Mock 的对象:

    if expected_type is Any or isinstance(value, Mock):
return

代码来自 here

因此,如果您使用适当的模拟,typechecked 应该不会给您带来任何问题。

关于python - 如何在测试运行时类型检查期间模拟 Python 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66654590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com