2011-08-11 61 views
6

我想单元测试开始,但我有一个问题变得setUpClass()工作。这里是我的测试代码...单元测试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。

+0

我已经在Windows 7下的Python 2.7上测试过你的代码,它工作的很好,测试通过了,如果你运行_exactly_上面的脚本,它真的不适合你吗? Python 3.3的文档并没有指出'setUpClass'的行为有任何变化。 – agf

+0

您粘贴的代码适用于python27和python 3.2.1的windows 7。 – stderr

+0

您是否有使用setUpClass的理由?只需使用'def setUp(self)'? – Bogdan

回答

1

好的 - 现在是时候承认这是我的错误。当我本来应该使用3.2.1(并且认为我是)时,我正在使用3.1.2。我现在已经变成了正确的版本,一切都很好,测试通过了。非常感谢所有回复的人(对于浪费你的时间感到遗憾:-))

5

我想你不是直接调用这个测试类,而是派生类。

如果是这种情况,您必须手动调用setUpClass() - 它不会自动调用。

class TestB(TestRepGen): 
    @classmethod 
    def setUpClass(cls): 
     super(TestB, cls).setUpClass() 

另外,根据the docsclass-level fixtures are implemented by the test suite。因此,如果您打电话给TestRepGentest_method某种您没有发布的奇怪方式,setUpClass可能无法运行。

+0

agf - 我直接打电话给班级,但最终会被分类,所以你的评论是有用的。谢谢。 –

+0

@Alan - 你应该发布你的解决方案作为答案并接受它。 – agf

+0

已发布解决方案。 –

10

setUpClass是2.7和3.2版本的单元测试框架的新增功能,如果你想在老版本中使用它,你需要使用鼻子作为你的测试运行而不是单元测试

+0

漂亮!我想知道为什么setUpClass不起作用。 – fthinker

+0

* zope.testing *的testrunner不支持'setUpClass()'。 – jnns