PythonPyGame中的单元测试用于key.get_pressed()

PythonPyGame中的单元测试用于key.get_pressed(),python,unit-testing,pygame,Python,Unit Testing,Pygame,我是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 w

我是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时,单元测试不同吗?

一种方法是抽象
Pygame.key.get_pressed()
,这样您就可以在测试过程中用其他返回我们想要测试的假输入的东西来替换它(我们称之为模拟)

在运行游戏时,您可以将
pygame.event.get
作为参数传递给\u execute上的
,并在测试中传递一个函数,该函数返回您想要的任何内容(模拟)

但是由于我们在何处使用python,我们也可以使用monkey patch
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()
将始终告诉用户右箭头键已按下


现在您已经了解了这一点,请看一下内置组件。

您通常如何实现单元测试?你试过什么?
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)