gpt4 book ai didi

python - 在 TestCase.setUp() 中模拟

转载 作者:行者123 更新时间:2023-11-28 21:19:03 25 4
gpt4 key购买 nike

我想模拟 TestCase 的所有测试方法。

我第一次尝试使用 TestCase.setUp() 没有成功,因为 setUp() 在测试方法执行之前完成。

我无法在 setUp() 中用这个模拟真实的测试方法:

with mock.patch(...):
do_something()

我想我错过了什么。

如何对一个测试用例的所有方法使用mock.patch()

最佳答案

with mock.patch() 是一个上下文管理器,补丁在上下文结束时不应用,并且上下文在代码块的末尾结束。

这意味着当 setUp() 结束时补丁将再次取消应用。

您的选择是使用@mock.patch() 作为类装饰器 或使用start and stop methods在修补程序上。

使用 @mock.patch() 作为类装饰器与将它作为装饰器应用于每个测试方法具有相同的效果:

@mock.patch('module.ClassName')
class TestFoo(unittest.TestCase):
def setUp(self):
# ...

def test_one(self, class_mock):
# ...

def test_two(self, class_mock):
# ...

这里test_onetest_two都传入了一个mock对象,因为@mock.patch()类装饰器已经找到了所有的测试方法并装饰它们。

使用 start 和 stop 方法可以在 setUptearDown 方法中应用和取消应用补丁:

class TestFoo(unittest.TestCase):
def setUp(self):
self.patch1 = mock.patch(...)
self.patch1.start()

def tearDown(self):
self.patch1.stop()

此处 patch1 在设置时启动,并在测试被拆除时再次停止。这就像上下文管理器一样,但是 Hook 到测试边界。

除了使用tearDown,您还可以使用TestCase.addCleanup()patch.stop() 注册为清理函数。 :

class TestFoo(unittest.TestCase):
def setUp(self):
patch1 = mock.patch(...)
patch1.start()
self.addCleanup(patch1.stop)

关于python - 在 TestCase.setUp() 中模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25338497/

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