如何使用内置输入对于多个输入

2024-09-27 19:16:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的单元测试中,我在测试中有两个提示。我试图使用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()情况(在第二个a.setProfileName()调用之后的第二个最后一个a.setProfileName())之后,测试失败。在

^{pr2}$

失败的原因是a.getProfileName返回的是self.profileName_dev的值,而不是{}。在

我在pythoncli中测试了我的代码,以确保行为是正确的。在

欢迎任何反馈。在

谢谢各位!在


Tags: devselfinputreturnvalueprodpatchbuiltins
2条回答

对同一个函数进行两次修补不会使它在不同的调用中返回不同的值。您可以使用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

我重温了blhsing的解决方案,它更加优雅。下面是我的工作测试代码:

@patch('builtins.input', side_effect=['dev', 'production'])
def test_setProfileName_modify_init_prompt_update_new(self, paramName):
    a = c.ALMConfig(self.configType)
    self.assertTrue(a.setProfileName())
    self.assertEqual(a.getProfileName(), self.profileName_dev)
    self.assertEqual(a.profileName, self.profileName_dev)


    self.assertEqual(a.getProfileName(), self.profileName_dev)
    self.assertTrue(a.setProfileName())
    self.assertEqual(a.getProfileName(), self.profileName_prod)
    self.assertEqual(a.profileName, self.profileName_prod)

谢谢大家的评论!:)

相关问题 更多 >

    热门问题