2017-06-28 53 views
2

我已经创建了一个使用Python 3.6 + Pygame的游戏,虽然我所做的任何测试都不会显示。我想知道如何在运行时显示测试或将测试输出到文件。这是我现在有(我的比赛被称为CatchTheFruit.py)代码:显示pygame单元测试

import CatchTheFruit 
import unittest 

class IntegerArithmentic(unittest.TestCase): 
    def test_checkWorks(self): 
     self.assertEqual((1 + 2), 3) 

if __name__ == '__main__': 
    unittest.main() 

这不是我会使用,虽然它仍然应该仍然显示其中一个测试。当它运行时,它会启动我的游戏,但不显示测试?那么,我该如何做到这一点,以便可以查看测试?这是否是由于我的游戏代码存在问题,或者测试是否需要修改?

+0

你是否已经尝试过在shell这个脚本?有时候项目的结构不合适,你可能需要移动一些文件或者编写另一种导入模块的方式 – PRMoureu

回答

3

默认情况下,单元测试显示在外壳/控制台,您的测试运行正常:

. 
---------------------------------------------------------------------- 
Ran 1 test in 0.000s 

OK 

单元测试的目的不是要显示给玩家,所以最好的解决办法是登录结果到一个文件。

unittest.main()接受一个参数为流(称为testRunner),你可以用它像这样的东西,产生在同一个文件夹中的文件:

if __name__ == '__main__': 

    with open('test.log', 'w') as f: 
     trunner = unittest.TextTestRunner(f) 
     unittest.main(testRunner=trunner) 

(那么你仍然可以使用这个文件作为源显示pygame的屏幕上显示结果)

编辑:

要回答这个问题发生在您导入游戏模块:

当您导入模块时会读取并评估模块,因此如果声明启动游戏的变量(如game = launch_game()),则会调用该函数。

简单的测试:创建第一个文件:

#mygame.py 

def main(): 
    print('this is printed when module is imported') 

game = main() 

然后,在一个又一个,执行导入:

# test.py 

import mygame 

print('This one goes next') 

当你执行test.py,它会显示两个打印语句。

所以你需要封装的可变游戏中一样的结构:

def main(): 
    print('this one is not printed') 

if __name__ == '__main__': 

    game = main() 
+0

这对我来说几乎适用,它会显示文件中的所有错误和事情,以便工作得很好。 'import CatchTheFruit' 但由于某些原因,当我导入使用pygame的游戏时,它会打开游戏,但不会显示任何测试,甚至不会显示在文件中? – TomRGarr

+0

我编辑了这篇文章来解释(也许)为什么它会在你导入游戏时启动游戏,但是现在我不确定你真的想用这些单元测试来做什么,你需要每次启动游戏时执行它们? – PRMoureu