我有以下代码:
import unittest
class TestFMP(unittest.TestCase):
@classmethod
def setUpClass(cls):
FMP_object = MyClass1(path, {})
Locator_object = MyClass2(path)
@classmethod
def tearDownClass(cls):
print('YYY')
def test_method(self):
self.assertEqual(FMP_object.method1(), Locator_object.method2())
我的理解是,setUpClass()应该在TestFMP类实例化时执行一次,并提供对FMP_object和Locator_object的恒定访问。但是,当我运行test_method时,出现以下错误:
testcase = TestFMP()
testcase.test_method()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-277-b11e25b4803c> in <module>
1 testcase = TestFMP()
----> 2 testcase.test_method()
<ipython-input-276-dba1c1e55b1a> in test_method(self)
12 def test_method(self):
13
---> 14 self.assertEqual(FMP_object.method1(), Locator_object.method2())
NameError: name 'FMP_object' is not defined
当我尝试使用self访问FMP_object / Locator_object时,我得到相同的结果。 test_method()中的前缀。
关于我在做什么错的任何想法吗?
我在Python 3.6上得到了这个。
答案 0 :(得分:1)
setupClass(cls)
被调用,但是您的计算结果未存储。您需要将结果分配给cls
(TestFMP
类)上的一个属性,而不仅仅是将其分配为变量,然后可以通过self
以self
的形式获取这些结果。可以访问cls
属性(但不能访问逆属性)。
类似以下内容将实现您的追求:
import unittest
class TestFMP(unittest.TestCase):
@classmethod
def setUpClass(cls):
# set `fmp` and `locator` onto the class through `cls`
cls.fmp = MyClass1(path, {})
cls.locator = MyClass2(path)
@classmethod
def tearDownClass(cls):
# Dispose of those resources through `cls.fmp` and `cls.locator`
print('YYY')
def test_method(self):
# access through self:
self.assertEqual(self.fmp.method1(), self.locator.method2())