我今天一直在用python编写一个简单的四联游戏。我打算对游戏进行全面测试。
除了主游戏循环外,我还为所有方法编写了测试。我不确定如何为主游戏循环编写有效的测试。
在以下功能中:
self.move获取玩家的移动并将其放入游戏板;和
is_game_complete()根据游戏是否完成返回布尔值。
以上两种方法均有效。
我不确定如何为以下内容编写有用的测试。测试合适吗?
def game_loop(self):
while True:
for active_player in self.players:
self.move(active_player)
if self.game_checker.is_game_complete():
return active_player
我希望有一种简洁的编写测试的方法,或者在这里测试不太可能有用。
非常感谢您的任何答复。
答案 0 :(得分:1)
您不应该使用单元测试来测试游戏循环(过多的依赖导致伪造)。在这里没有用。如果您已经测试了self.move(active_player)
和is_game_complete()
,那就足够了。您不能拥有100%的测试覆盖率,尤其是在游戏开发中。
答案 1 :(得分:1)
将代码分成可测试的部分。
首先,一个生成器可能会产生无限量的游戏状态,但仅在需要时才会生成:
def game_gen(self):
for active_player in self.players:
yield self.move(active_player)
这要求self.move
返回需要评估的内容,而不是简单地进行评估。此东西还应将活动播放器保留为属性,以备后用。
接下来,编写一个消费游戏状态流的函数:
def game_loop(self, stream):
for move in stream:
self.evaluate(move) # Evaluate the move returned by self.move
if self.game_checker.is_game_complete():
return move.player # The player that made the move
现在您有两个可测试的部分。 game_gen
产生的项目可以一次测试一次,而不必等待整个游戏在循环终止之前进行。 game_loop
不再隐式生成游戏;它会获得game_gen
产生的一系列移动,或者是您自己创建的人工测试数据,以验证循环是否根据需要终止(或不终止)。