防止unittest调用sys.exit()

时间:2014-08-07 12:19:26

标签: python unit-testing

我无法阻止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

1 个答案:

答案 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。