我想测试下一堂课:
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的新手,我第一次尝试测试它。
答案 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()
。