Python unitest - использовать переменные, определенные в настройках модуля и класса, в тестах
Python unittest использует носеты для экспериментов с Python Class и Module fixtures, чтобы иметь минимальную настройку в моих тестах.
Проблема . Я сталкиваюсь с этим, я не уверен, как использовать любые переменные, определенные в функциях setupUpModule
и setUpClass
в моих тестах (например: - 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
----------------------------------------------------------------------
конечно, если do gloabl a
и global b
, это сработает. Есть ли лучший способ?
Ответы
Ответ 1
Для переменной str a
, единственным решением является global a
. Если вы посмотрите на исходный код Python 2 unittest, setupModule()
, похоже, не делает ничего волшебного, поэтому применяются все обычные правила пространства имен.
Если a
- изменяемая переменная, как и список, вы можете определить ее в глобальной области действия, а затем добавить к ней в setupModule.
Переменная b
легче работать, потому что она определена внутри класса. Попробуйте следующее:
@classmethod
def setUpClass(cls):
cls.b = "Setup Class variable"
def test_1(self):
print self.b