str:-6ren">
gpt4 book ai didi

python - 忽略一次测试的类级别补丁装饰器

转载 作者:行者123 更新时间:2023-12-05 06:15:01 25 4
gpt4 key购买 nike

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

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 函数除外)。

我通过在类级别上使用 @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 的修补方法?

最佳答案

为什么不在同一个测试模块中有第二个类,并像这样将 bar1 测试移动到它:

foo = Foo()

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

@patch("foo_module.Foo.bar1", mock_bar1)
class FooTest(TestCase):
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())

class FooBar1Test(TestCase):
def test_bar1(self) -> None:
self.assertEqual("bar1", foo.bar1())

关于python - 忽略一次测试的类级别补丁装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62645237/

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