Как смоделировать base_class из внешнего модуля? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь провести модульное тестирование класса, который получен из base_class во внешнем модуле. В моей среде dev / test у меня нет доступа к этому внешнему модулю, что означает, что я должен каким-то образом смоделировать этот base_class.

Мой тестовый код находится в файле, отличном от кода, который я пытаюсь протестировать.

Проблема может быть обобщена следующим образом:

my_class.py

import external_module

class MyClass(external_module.ExternalClass):
    def test_method(self):
        return "successful"

test_my_class.py

import sys
import unittest
from unittest.mock import MagicMock

sys.modules['external_module'] = MagicMock()

from my_class import MyClass

class TestMyClass(unittest.TestCase):
    def test_first(self):
        my_class = MyClass()
        result = my_class.test_method()
        self.assertEqual(result, "successful")

if __name__ == '__main__':
    unittest.main()

Результаты


При запуске test_my_class.py результат будет следующим:

AssertionError: <MagicMock name='mock.ExternalClass.test_method()' id='140272215184664'> != 'successful'

Очевидно, что так как external_module является ложным, даже MyClass становится экземпляромmock-object.

Похожие посты


Проблема аналогична описанной в Python mock: базовый класс-насмешка для наследования , но отличается тем, чтоbase_class из внешнего модуля.

Четный Как смоделировать базовый класс с библиотекой python mock демонстрирует некоторые сходства с моей проблемой, хотя решения не могут быть применены напрямую.

Попытки и сбои


Чтобы заставить импорт

import external_module

работать в my_class.py

sys.modules['external_module'] = MagicMock()

необходимо установить в test_my_class.py .

Хотя это приводит к тому, что external_module. * Становится экземпляром Mock.

...