如何使用一次 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 块中的所有补丁,并返回到测试方法。
我有一个代码案例,我必须从多个数据库中提取数据 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 块中的所有补丁,并返回到测试方法。