Использование python макета в отдельном потоке во время юнит-тестов - PullRequest
0 голосов
/ 21 апреля 2020

Я столкнулся с проблемами с насмешливыми объектами в многопоточном сценарии. В большинстве частей моего проекта работает какой-то поток, который управляется отправкой сообщений, установкой флагов и т. Д. c. к этому. Некоторые из этих потоков используют объекты, которые не нужны во время тестирования и могут быть смоделированы. Единственный способ, которым я смог добиться этого, - это «сохранить» патч-контекст с другим потоком «бегуна»:

import unittest
import mock
import threading

def main_thread():
    """Wait for signals, messages"""
    """Do something with project.object"""
    pass

class Test(unittest.TestCase):
    def setUp(self):
        runner_thread = threading.Thread(target=self.runner)
        runner_thread.start()

    def tearDown(self):
        """Signal 'main_thread' to exit"""
        pass

    def runner(self):
        with mock.patch("project.object"):
            thread = threading.Thread(target=main_thread)
            thread.start()
            thread.join()

    def test_case_1(self):
        """Send messages to main_thread"""
        """Wait for response"""
        """Assert data"""
        """..."""
        pass

Я хотел бы выяснить, почему это работает, или, может быть, Как я мог достичь этого по-другому. Хотя создание бегуна работает, это ужасно, и я не хочу писать его для каждого теста. Также, как мне изменить фиктивные объекты return_value et c. во время выполнения теста? Используйте self.mock_object? Нет, спасибо, должен быть другой путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...