Как смоделировать метод, который был вызван методом __init__ - PullRequest
0 голосов
/ 27 февраля 2019

Мой класс точно так же, как

import a

class Demo(object):
    def __init__(self):
        ......
        fun_return_value = a.methodB()
        ......

   def methodA(self):
       ......

тестовый класс, как показано ниже

class TestDemo(test.TestCase):

    def setUp(self):
        super(TestDemo, self).setUp()

    def test_methodA(self):
         ......

Когда я хочу сделать unittest метода A, возникает вопрос, что я должен высмеивать a.methodB. Но как я могу это сделать? Я проверил документ и ничего не нашел.Попросите других и используйте @mock.patch("a.methodB") во главе класса TestDemo. Просто как

    @mock.patch("a.methodB")
    class TestDemo(test.TestCase):

        def setUp(self, mock_methodB):
            super(TestDemo, self).setUp()
            mock_methodB.return_value=None

        def test_methodA(self):
             ......

Но это не сработало. Как смоделировать метод, который был вызван методом " init "

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

нашел способ исправить это.

class TestDemo(test.TestCase):
    def setUp(self):
        super(TestDemo, self).setUp()
        self.mocks = [mock.patch('a.methodB',
                                  mock.MagicMock(return_value=None))]
        for single_mock in self.mocks:
            single_mock.start()
            self.addCleanup(single_mock.stop)

0 голосов
/ 27 февраля 2019

Патч может использоваться как декоратор класса TestCase.Это работает, украшая каждый метод теста в классе.Это сокращает стандартный код, когда ваши методы тестирования используют общий набор исправлений.patch () находит тесты, ища имена методов, начинающиеся с patch.TEST_PREFIX.По умолчанию это «тест»

с документы .Вот почему ваш код не работает.Вместо этого вы можете использовать методы запуска и остановки .

...