Ama*_*nth 7 unit-testing mocking python-2.7 teardown
我正在使用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)
Run Code Online (Sandbox Code Playgroud)
我尝试通过这样的方式撤消TearDown方法中的mock,但它不起作用.
pass_helper._get_password_from_keyboard = pass_helper._get_password_from_keyboard
Run Code Online (Sandbox Code Playgroud)
如何恢复类方法的原始功能?
看起来你已经收集到的问题是你所做的改变不仅限于测试范围,而是流入其他测试(这在单元测试时当然是个大问题).你想要颠倒你的拆解方法的改变是一个很好的想法,但问题是当你这样做时,你正在重新分配方法的模拟版本:
pass_helper._get_password_from_keyboard = pass_helper._get_password_from_keyboard
Run Code Online (Sandbox Code Playgroud)
像这样的东西应该工作,在模拟方法之前,你将方法的"真实"版本分配给临时变量:
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)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2603 次 |
| 最近记录: |