SetUpClass модуля тестирования Python не работает - PullRequest
0 голосов
/ 24 октября 2019

У меня есть следующий код:

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

Я получаю тот же результат, когда пытаюсь получить доступ к FMP_object / Locator_object с помощью self. префикс в test_method ().

Есть идеи о том, что я делаю неправильно?

Я получаю это на Python 3.6.

1 Ответ

1 голос
/ 24 октября 2019

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...