gpt4 book ai didi

python - 在类和方法上组合 @mock.patch 时的顺序

转载 作者:行者123 更新时间:2023-12-04 15:33:42 26 4
gpt4 key购买 nike

当一个方法应该在测试用例中被模拟时,可以应用 @mock.patch python中的装饰器unittest框架(见 1):

    class MyTest(TestCase):
@patch('method2')
@patch('method1')
def test_stuff(self, mock_method1, mock_method_2):
...

根据文档 2 ,也可以申请 @mock.patch作为类装饰器:
    @patch('method2')
@patch('method1')
class MyTest(TestCase):
def test_stuff(self, mock_method_1, mock_method_2):
...

因此,将这两种方法结合起来也应该是可能和合理的:
    @patch('method1')
class MyTest(TestCase):
@patch('method2')
def test_stuff(self, mock_method_A, mock_method_B):
...

现在我想知道模拟按什么顺序传递给 test_stuff . mock_method_A也是如此模拟 method1method2 ?

最佳答案

来自方法装饰器的模拟在类装饰器之前应用。 IEmock_method_Amethod2 的模拟和 mock_method_Bmethod1 的模拟

请参阅此自包含示例以进行说明:

from unittest import TestCase, main, mock


def method1():
return 1


def method2():
return 2


@mock.patch('test.method2', return_value='method2')
@mock.patch('test.method1', return_value='method1')
class TestClassDecoratorOrder(TestCase):
def test_order(self, mock_method1, mock_method2):
self.assertEqual(mock_method1(), 'method1')
self.assertEqual(mock_method2(), 'method2')


class TestMethodDecoratorOrder(TestCase):
@mock.patch('test.method2', return_value='method2')
@mock.patch('test.method1', return_value='method1')
def test_order(self, mock_method1, mock_method2):
self.assertEqual(mock_method1(), 'method1')
self.assertEqual(mock_method2(), 'method2')


@mock.patch('test.method2', return_value='method2')
class TestCombinedDecoratorOrder(TestCase):
@mock.patch('test.method1', return_value='method1')
def test_order(self, mock_method1, mock_method2):
self.assertEqual(mock_method1(), 'method1')
self.assertEqual(mock_method2(), 'method2')


if __name__ == "__main__":
main()

关于python - 在类和方法上组合 @mock.patch 时的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60504425/

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