如何使用一次 declare/define @patch 并在测试中的每个单元测试中使用它 class

How to use declare/define @patch once and use it in every unit test inside a test class

我有一个代码案例,我必须从多个数据库中提取数据 table。我一直在使用 mock package 中的 patch 来编写单元测试用例。在测试用例中模拟数据库时,我在每个测试中都使用了补丁,每个 class 大约有 10-15 个测试。有什么方法可以声明 @patch 一次并将其分配给变量并使用变量而不是在每个测试中都使用 @patch 。 示例:

@patch("py-repo.module.class.get_data_from_db_1",
           side_effect=mock_method1)
@patch("py-repo.module.class.get_data_from_db_2",
           side_effect=mock_method2)
@patch("py-repo.module.class.get_data_from_db_3",
           side_effect=mock_method3)
def test_case_1(self, mock_1, mock_2, mock_3):
    self.assertEqual("some outputs",object("some inputs"))

patch() 非常灵活。您当前将其用作函数装饰器,但它也可以是 class 装饰器。然后它将期望 class 上的每个测试方法都接受相同的模拟对象。

如果你不想为每个测试方法声明参数,你也可以调用补丁程序的 start() method from a test class's setUp() method, and store the mock object in a member variable. Just be sure to use addCleanup() 来调用 stop().

还有一个选择:编写一个自定义 context lib,它使用 with 块中的所有补丁,并返回到测试方法。