gpt4 book ai didi

python - 如何忽略或覆盖对类的所有方法的调用以进行测试

转载 作者:行者123 更新时间:2023-12-01 03:40:40 31 4
gpt4 key购买 nike

我已经设置了一个单元测试,看起来像这样:

from unittest import TestCase
from . import main
from PIL import Image
class TestTableScreenBased(TestCase):
def test_get_game_number_on_screen2(self):
t = main.TableScreenBased()
t.entireScreenPIL = Image.open('tests/1773793_PreFlop_0.png')
t.get_dealer_position()

我要测试的函数名为 get_dealer_position。在此函数中,我正在更新 gui 上的一些项目,这些项目未针对测试进行初始化,因此我收到预期的错误:NameError: name 'ui_action_and_signals' is not Defined

def get_dealer_position(self):
func_dict = self.coo[inspect.stack()[0][3]][self.tbl]
ui_action_and_signals.signal_progressbar_increase.emit(5)
ui_action_and_signals.signal_status.emit("Analyse dealer position")
pil_image = self.crop_image(self.entireScreenPIL, self.tlc[0] + 0, self.tlc[1] + 0,
self.tlc[0] +800, self.tlc[1] + 500)

“忽略”或覆盖对该类 ui_action_and_signals 中方法的所有调用的最佳方法是什么?这个类包含大量方法(用于数百个 gui 项目),我不希望单独重写它们中的每一个。有没有办法告诉 python 测试与 ui_action_and_signals 相关的所有内容都应该被忽略?是否有任何优雅的方法可以在其中使用应用程序进行猴子修补或模拟?

最佳答案

如果您使用的是 Python >= 3.3,您可以使用内置的 unittest.mock模块。如果您使用的是早期版本的 Python,则可以通过安装 the backport 使用相同的工具。使用点。

您需要用 Mock 对象替换丢失的依赖项 - 有很多方法可以做到这一点,但一种方法是使用补丁装饰器,它负责在测试后删除 Mock 对象:

from unittest.mock import patch
from unittest import TestCase
from . import main
from PIL import Image
class TestTableScreenBased(TestCase):
@patch('module.path.of.ui_action_and_signals')
def test_get_game_number_on_screen2(self, mock_ui_action_and_signals):
t = main.TableScreenBased()
t.entireScreenPIL = Image.open('tests/1773793_PreFlop_0.png')
t.get_dealer_position()

关于补丁装饰器的更多信息in the official documentation包括一些hints on where to patch这有时并不完全明显。

模拟系统还有许多您可能想要使用的其他功能,例如复制现有类的规范,或者找出测试期间对您的模拟对象进行了哪些调用。

关于python - 如何忽略或覆盖对类的所有方法的调用以进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39686119/

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