Python unitest-在测试中使用模块和类级别设置函数中定义的变量

问题描述 投票:25回答:1

Python单元测试使用鼻子测试来测试Python Class and Module fixtures,以使我的测试中的设置最少。

我面临的是[[问题,我不确定如何在测试中使用setupUpModulesetUpClass函数中定义的任何变量(例如:-test_1)。

这是我正在尝试的内容:

import unittest def setUpModule(): a = "Setup Module variable" print "Setup Module" def tearDownModule(): print "Closing Module" class TrialTest(unittest.TestCase): @classmethod def setUpClass(cls): print a #<====== b = "Setup Class variable" @classmethod def tearDownClass(cls): print "Closing Setup Class" def test_1(self): print "in test 1" print a #<====== print b #<====== def test_2(self): print "in test 2" def test_3(self): print "in test 3" def test_4(self): print "in test 4" def test_5(self): print "in test 5" if __name__ == "__main__": unittest.main()

我得到的错误是:

Setup Module ERROR Closing Module ====================================================================== ERROR: test suite for <class 'one_setup.TrialTest'> ---------------------------------------------------------------------- Traceback (most recent call last): File "/Library/Python/2.7/site-packages/nose/suite.py", line 208, in run self.setUp() File "/Library/Python/2.7/site-packages/nose/suite.py", line 291, in setUp self.setupContext(ancestor) File "/Library/Python/2.7/site-packages/nose/suite.py", line 314, in setupContext try_run(context, names) File "/Library/Python/2.7/site-packages/nose/util.py", line 469, in try_run return func() File "/Users/patila14/Desktop/experimental short scripts/one_setup.py", line 13, in setUpClass print a NameError: global name 'a' is not defined ----------------------------------------------------------------------

当然,如果执行gloabl aglobal b,它将起作用。有没有更好的方法?
python unit-testing oop nose python-unittest
1个回答
29
投票

对于str变量a,唯一的解决方案是global a。如果查看Python 2Python 3源代码,setupModule()似乎并没有做任何神奇的事情,因此所有常用的名称空间规则都适用。

如果a是一个可变变量,例如列表,则可以在全局范围内定义它,然后将其追加到setupModule中。

Variable b

易于使用,因为它是在类中定义的。试试这个:@classmethod def setUpClass(cls): cls.b = "Setup Class variable" def test_1(self): print self.b
© www.soinside.com 2019 - 2024. All rights reserved.