gpt4 book ai didi

unit-testing - Python撤销方法模拟

转载 作者:行者123 更新时间:2023-12-04 05:00:10 25 4
gpt4 key购买 nike

我正在使用 Mock 来替换具有特定返回值的类中的方法。它工作得很好,也许有点太好了......我这样做了(见下文),但在下一个测试类中,我在没有模拟的情况下重用了密码类,并且放置在该测试中的模拟仍然有效。

from utils import password as pass_helper

class TestPassword(unittest.TestCase):
def setUp(self):
self.username = "user"
self.password = "Test_1234_pass"
pass_helper._get_password_from_keyboard = Mock(return_value=self.password)

def test_password(self):
password = pass_helper._get_password_from_keyboard(self.username)
self.assertEqual(password, self.password)

我尝试通过执行类似操作来撤消 TearDown 方法中的模拟,但它不起作用。
pass_helper._get_password_from_keyboard = pass_helper._get_password_from_keyboard

如何恢复类方法的原始功能?

最佳答案

看起来您已经收集到的问题是,您所做的更改不限于测试范围,而是渗透到其他测试中(这在单元测试中当然是一个大问题)。您在拆卸方法中逆转更改的想法是一个很好的想法,但是问题是您在执行此操作时将方法的模拟版本重新分配回自身:

pass_helper._get_password_from_keyboard = pass_helper._get_password_from_keyboard

这样的事情应该可以工作,在模拟方法之前,您将方法的“真实”版本分配给临时变量:
def setUp(self):
self.username = "user"
self.password = "Test_1234_pass"
self.real_get_password_from_keyboard = pass_helper._get_password_from_keyboard
pass_helper._get_password_from_keyboard = Mock(return_value=self.password)

def tearDown(self):
pass_helper._get_password_from_keyboard = self.real_get_password_from_keyboard

def test_password(self):
password = pass_helper._get_password_from_keyboard(self.username)
self.assertEqual(password, self.password)

希望这可以帮助!

关于unit-testing - Python撤销方法模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18082081/

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