Модульное тестирование в Python Pygame для key.get_pressed () - PullRequest
0 голосов
/ 21 октября 2018

Я новичок в программировании на Python и мне нужна помощь с модульным тестированием.Я хочу протестировать свои модули, которые перемещают расположение изображений в Pygame на основе того, что пользователь нажал.Вот мои модули:

def moveRight(self):
    self.x = self.x + self.speed

def moveLeft(self):
    self.x = self.x - self.speed

Вот где я называю эти модули:

def on_execute(self):

    # While game is running
    while( self._running ):
        pygame.event.pump()

        keys = pygame.key.get_pressed() 

        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?

1 Ответ

0 голосов
/ 22 октября 2018

Один из способов - абстрагироваться от 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...