gpt4 book ai didi

python - Python Pygame 中 key.get_pressed() 的单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:16 24 4
gpt4 key购买 nike

我是 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() ,这样你就可以在测试期间用其他返回我们想要测试的假输入的东西替换它(我们称之为模拟) 。

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 module .

关于python - Python Pygame 中 key.get_pressed() 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52917479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com