Один из способов - абстрагироваться от pygame.key.get_pressed()
, чтобы вы могли заменить его во время тестов чем-то другим, что возвращает ложный ввод, который мы хотим протестировать (назовем это насмешливым).
def on_execute(self, key_state_function):
# While game is running
while( self._running ):
pygame.event.pump()
keys = key_state_function()
if (keys[K_RIGHT]):
self.player.moveRight()
if (keys[K_LEFT]):
self.player.moveLeft()
# Use class players function moveUp to move up
if (keys[K_UP]):
self.player.moveUp()
self.on_render()
При запуске игры вы передаете pygame.event.get
в качестве аргумента on_execute
, а в своих тестах вы передаете функцию, которая возвращает все, что вы хотите (макет).
Но так как мы используем python where, мы также можем обезьяньим патчем pygame.event.get
(заменить всю функцию во время выполнения).
Так что в тесте мы будем делать что-то вроде этого:
def create_key_mock(pressed_key):
def helper():
tmp = [0] * 300
tmp[pressed_key] = 1
return tmp
return helper
pygame.key.get_pressed = create_key_mock(K_RIGHT)
и вот, теперь pygame.key.get_pressed()
всегда будет сообщать, что нажата клавиша со стрелкой вправо.
Теперь, когда вы знаете об этом, взгляните на встроенный модуль mock
.