作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的单元测试中,我在测试中有 2 个提示。我正在尝试使用 2 @patch("builtins.input")
, 但它似乎只取返回值中的 1 个。
@patch("builtins.input")
@patch("builtins.input")
def test_setProfileName_modify_init_prompt_empty(self, paramName1, paramName2):
paramName1.return_value = self.profileName_prod
paramName2.return_value = self.profileName_dev
a = c.ALMConfig(self.configType)
self.assertTrue(a.setProfileName())
self.assertEqual(a.getProfileName(), self.profileName_dev)
self.assertEqual(a.profileName, self.profileName_dev)
self.assertTrue(a.setProfileName())
self.assertEqual(a.getProfileName(), self.profileName_prod)
self.assertEqual(a.profileName, self.profileName_prod)
来电a.setProfileName()
将使用 input()
提示输入 1调用我的函数。在此测试中,它将调用 a.setProfileName()
两次。
a.setProfileName()
, 我会输入 self.profileName_prod
的值.self.profileName_dev
的值.但第二次测试失败a.setProfileName()
案例(在第二个 assertEqual
调用之后的倒数第二个 a.setProfileName()
)。
self.assertEqual(a.getProfileName(), self.profileName_prod)
失败的原因是因为a.getProfileName
正在返回 self.profileName_dev
的值而不是 self.profileName_prod
.
我已经在 python cli 中测试了我的代码以确保行为正确。
欢迎任何反馈。
谢谢大家!
最佳答案
两次修补同一个函数不会使其在不同的调用中返回不同的值。您可以使用 Mock
对象的 side_effect
属性,方法是使用您希望函数在连续调用中返回的值列表来设置它:
from unittest.mock import patch
@patch('builtins.input', side_effect=['dev', 'prod'])
def test_input(mock_input):
assert input() == 'dev'
assert input() == 'prod'
test_input() # this will not raise an exception since all assertions are True
关于python - 如何将 builtins.input 用于多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580016/
我是一名优秀的程序员,十分优秀!