我无法阻止Unittest调用sys.exit()。我发现Unittest causing sys.exit()正在搜索答案。我将代码修改为
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(run_tests.Compare))
并把它放在我的主要。我相信我唯一改变的是我的测试是在一个名为run_tests.py的单独文件中。它看起来像这样
import unittest
from list_of_globals import globvar
value1 = globvar.relerror
value2 = globvar.tolerance
class Compare(unittest.TestCase):
def __init__(self,value1,value2):
super(Compare, self).__init__()
self.value1 = value1
self.value2 = value2
def runTest(self):
self.assertTrue(self.value1 < self.value2)
当我运行main函数时,我收到以下错误
File "./main.py", line 44, in <module> unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(run_tests.Compare))
File "/usr/lib64/python2.6/unittest.py", line 550, in loadTestsFromTestCase
return self.suiteClass(map(testCaseClass, testCaseNames))
TypeError: __init__() takes exactly 3 arguments (2 given)
我不明白为什么会出现这种错误或者如何修复它。任何帮助将非常感激。我在linux上使用python 2.6
答案 0 :(得分:1)
您的问题在于您的单元测试课程。
编写单元测试时,您不打算覆盖init - 因为init方法用于处理要运行的测试。对于测试配置,例如设置变量,您应该编写一个名为setUp
的方法,该方法不带参数。例如:
class Compare(unittest.TestCase):
def setUp(self):
self.value1 = globvar.relerror
self.value2 = globvar.tolerance
def runTest(self):
self.assertTrue(self.value1 < self.value2)
链接问题中的问题是unittest.main
在运行所有测试后退出python。这不是该用户的理想结果,因为他们正在从IPython Notebook运行测试,这本质上是一个增强的解释器。因此它也被sys.exit
终止。也就是说,在测试之外而不是在测试中调用exit。我假设正在测试的功能是调用exit。