关于python:防止unittest调用sys.exit()

Preventing unittest from calling sys.exit()

我无法阻止UnitTest调用sys.exit()。我发现UnitTest导致sys.exit()搜索答案。我将代码修改为

1
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(run_tests.Compare))

把它放在我的主管道里。我相信唯一改变的是我的测试在一个名为run-tests.py的独立文件中。看起来是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)

当我运行主函数时,收到以下错误

File"./main.py", line 44, in 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


你的问题是你的单元测试课。

在编写单元测试时,您并不打算重写init——因为init方法用于处理要运行的测试。对于测试配置(如设置变量),您应该编写一个名为setUp的方法,该方法不接受任何参数。例如:

1
2
3
4
5
6
7
8
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笔记本上运行测试。因此,它也被sys.exit终止。也就是说,exit在测试之外调用,而不是在测试中调用。我假设测试中的一个函数正在调用exit。