Unittest中的setUpClass不生效
我正在尝试开始使用unittest这个测试工具,但在使用setUpClass()
时遇到了问题。以下是我的测试代码...
import unittest
class TestRepGen(unittest.TestCase):
""" Contains methods for training data testing """
testvar = None
@classmethod
def setUpClass(cls):
cls.testvar = 6
def test_method(self):
""" Ensure data is selected """
self.assertIsNotNone(self.testvar,"self.testvar is None!")
# run tests
if __name__ == '__main__':
unittest.main()
出现了一个断言错误信息,显示self.testvar == None
,而且这个值没有被setUpClass()
改变。我的代码有什么问题吗?
无论是从我的IDE(Wing)运行代码,还是直接从命令行运行,结果都是一样的。顺便说一下,我是在Windows7下使用Python 3.2.1。
3 个回答
7
我猜你不是直接调用这个测试类,而是调用了一个派生类。
如果是这样的话,你需要手动调用 setUpClass()
,它不会自动被调用。
class TestB(TestRepGen):
@classmethod
def setUpClass(cls):
super(TestB, cls).setUpClass()
另外,根据文档,类级别的固定装置是由测试套件实现的
。所以,如果你以某种奇怪的方式调用了 TestRepGen
或 test_method
,而你没有提到,那么 setUpClass
可能就不会被执行。
10
setUpClass 是在 unittest 框架的 2.7 和 3.2 版本中新增的功能。如果你想在更旧的版本中使用它,就需要用 nose 作为你的测试运行工具,而不是 unittest。
2
好的,我得承认这是我的错误。我原本应该使用3.2.1版本,但我却在用3.1.2版本。我现在已经换成正确的版本了,一切都正常,测试也通过了。非常感谢所有回复我的人(抱歉浪费了你们的时间 :-( )。