以下方法的测试检查提示中的标准输出是否正确。
当 'input()' 被调用时,它会等待用户按下回车键并中断。测试通过自动按键“输入”来通过。
这很hacky,必须有更好的方法来测试这种方法。
方法:
class GameDisplay:
@staticmethod
def prompt(text):
input_value = input(text)
return input_value
测试:
from pynput.keyboard import Key, Controller
class TestGameDisplay(unittest.TestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_prompt_output(self, mock_stdout):
keyboard = Controller()
keyboard.press(Key.enter)
self.gameDisplay.prompt('Choose 0: ')
keyboard.release(Key.enter)
self.assertEqual( mock_stdout.getvalue(), 'Choose 0: ')
if __name__ == '__main__':
unittest.main()
输出:
由于按下回车而换行。
...................................
............................................
----------------------------------------------------------------------
Ran 79 tests in 0.113s
OK
测试修复尝试:
@patch('sys.stdout', new_callable=StringIO)
@patch('builtins.input', return_value='0')
def test_prompt_output(self, mock_stdout, input):
self.gameDisplay.prompt('Choose 0: ')
self.assertEqual( mock_stdout.getvalue(), 'Choose 0: ')
输出:
FAIL: test_prompt_output (tests.test_game_display.TestGameDisplay)
self.assertEqual( mock_stdout.getvalue(), 'Choose 0: ')
AssertionError: <MagicMock name='input.getvalue()' id='4675607744'> != 'Choose 0: '
----------------------------------------------------------------------
Ran 79 tests in 0.015s
FAILED (failures=1)