显示pygame单元测试

时间:2017-06-28 12:34:27

标签: python unit-testing pygame

我使用Python 3.6 + Pygame创建了一个游戏,但我所做的任何测试都不会显示。我想知道如何在运行或将测试输出到文件时显示测试。这是我目前的代码(我的游戏名为CatchTheFruit.py):

import CatchTheFruit
import unittest

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

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

这不是我将使用的测试之一,尽管它仍然应该显示。当它运行时,它将启动我的游戏,但没有显示测试?那我怎么做才能看到测试呢?这是因为我的游戏代码中存在问题还是需要修改测试?

1 个答案:

答案 0 :(得分:3)

默认情况下,unittest显示在shell /控制台中,测试运行正常:

.
----------------------------------------------------------------------
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()