Python 如何忽略或重写对类的所有方法的调用以进行测试

Python 如何忽略或重写对类的所有方法的调用以进行测试,python,unit-testing,Python,Unit Testing,我已经设置了一个单元测试,看起来像这样: 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('

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

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\u action\u and\u signals'未定义

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)

“忽略”或覆盖该类中所有方法调用的最佳方法是什么?这个类包含大量的方法(用于数百个gui项目),我不想单独重写它们。有没有办法告诉python测试应该忽略所有与ui\u操作和\u信号相关的内容?是否有任何优雅的猴子补丁或模拟方法可以使用此应用程序?

如果您使用的是Python>=3.3,则可以使用内置模块。如果您使用的是早期版本的Python,那么可以通过使用Pip安装来使用相同的工具

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

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()
还有更多关于补丁装饰器的信息,包括一些有时并不完全明显的信息

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