忽略一个测试的类级补丁修饰符

2024-04-25 06:40:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这样的模块中有一个类:

class Foo:
    def bar1(self) -> str:
        return "bar1"

    def bar2(self) -> str:
        bar = bar1()
        return bar

    def bar3(self) -> str:
        bar = bar1()
        return bar

    def bar4(self) -> str:
        bar = bar1()
        return bar

我在另一个模块中有一个测试类,我想为每个barX函数模拟方法bar1,除非我测试我的bar1本身。实际上,我有很多barX方法(因此也有测试),所以我不想简单地在每个barX测试方法(test_bar1函数除外)上面放相同的补丁装饰器

我通过在类level上用@patch装饰器修补bar1方法解决了这个问题,但是我如何否定1测试方法的装饰器(我对bar1()的测试)

我的测试代码:

foo = Foo()

def mock_bar1() -> str:
    return "mocked_bar1"

@patch("foo_module.Foo.bar1", mock_bar1)
class FooTest(TestCase):
    def test_bar1(self) -> None:
        # fails because bar1() is mocked, I want to disabed the mock here
        self.assertEqual("bar1", foo.bar1())

    def test_bar2(self) -> None:
        self.assertEqual("mocked_bar1", foo.bar2())

    def test_bar3(self) -> None:
        self.assertEqual("mocked_bar1", foo.bar3())

    def test_bar4(self) -> None:
        self.assertEqual("mocked_bar1", foo.bar4())

那么,我怎样才能忽略/否定我的测试方法test_bar1的补丁方法呢


Tags: 方法testselfnonereturnfoodefbar