如何测试程序是否存在

时间:2013-08-11 21:03:19

标签: testing python-2.7 exit nosetests

我想测试下一堂课:

from random import randint

class End(object):
          def __init__(self):
             self.quips=['You dead', 'You broke everything you can','You turn you head off']

          def play(self):
                print self.quips[randint(0, len(self.quips)-1)]
                exit(1)

我想用nosetests测试它,所以我可以看到类正确地退出代码1.我尝试了不同的变种但是nosetest返回错误,如

  File "C:\Python27\lib\site.py", line 372, in __call__
    raise SystemExit(code)
SystemExit: 1

----------------------------------------------------------------------
Ran 1 test in 5.297s

FAILED (errors=1)

当然我可以假设它退出但我想测试返回OK状态而不是错误。对不起,如果我的问题可能是愚蠢的。我是python的新手,我第一次尝试测试它。

2 个答案:

答案 0 :(得分:1)

我建议使用assertRaises context manager。这是一个示例测试,确保play()方法退出:

import unittest
import end

class TestEnd(unittest.TestCase):
    def testPlayExits(self):
        """Test that the play method exits."""
        ender = end.End()
        with self.assertRaises(SystemExit) as exitexception:
            ender.play()
        # Check for the requested exit code.
        self.assertEqual(exitexception.code, 1)

答案 1 :(得分:0)

正如您在回溯中所看到的,sys.exit() *在您调用时会引发一个名为SystemExit的异常。所以,这就是你想用鼻子assert_raises()测试的东西。如果您使用unittest2.TestCase self.assertRaises撰写测试{。}}。

*实际上您使用的是普通内置exit(),但您确实应该在程序中使用sys.exit()