Тестирование последовательности вызовов Python в многопоточном контекстеPython

Программы на Python
Anonymous
Тестирование последовательности вызовов Python в многопоточном контексте

Сообщение Anonymous »

мне нужно проверить последовательность вызова некоторых методов класса. Тест для method_1 () Я хотел бы быть уверенным, что он вызывает некоторые методы в точном порядке. В следующем файле class_a.py :

Код: Выделить всё

class A:
__lock = None

def __init__(self, lock):
self.__lock = lock

def method_1(self):
self.__lock.acquire()
self.__atomic_method_1()
self.__lock.release()

def __atomic_method_1(self):
pass

__lock атрибут - это экземпляр The Class Thinking.lock и используется для достижения потока безопасного выполнения __atomic_method_1 () .
Мне нужно написать модульный тест, который проверяет последовательность вызова методов класса a , когда он вызывается метод_1 () .
Проверка должна проверить, что method_1 () < /code> вызовы: < /p>
  • Как первый метод: self .__ lock.acquire ()
  • После этого он называет себя .__ atomic_method_1 ()
  • Последний метод называется Self .__ Lock.release ( )
мои потребности возникают из -за желания убедиться, что метод __atomic_method_1 () работает в многопоточном контексте без прерывания. проблема. Решение, предоставленное ссылкой, идеально подходит для проверки вызова порядок последовательности функций, вызванных другой функцией. В ссылке показан пример, в котором тестовая функция и функции, вызванные функциями, содержатся в файле с именем module_under_test < /code>.

в моем случае, однако я должен проверить вызывающую последовательность методов класса и это различие не позволяет использовать решение, предоставленное ссылкой. Разработайте модульный тест, относящийся к ссылке, и таким образом я подготовил трассировку тестового файла, который я могу показать ниже: < /p>

Код: Выделить всё

import unittest
from unittest import mock
from class_a import A
import threading

class TestCallOrder(unittest.TestCase):
def test_call_order(self):
# create an instance of the SUT (note the parameter threading.Lock())
sut = A(threading.Lock())

# prepare the MOCK object
source_mock = ...
with patch(...)

# prepare the expected values
expected = [...]

# run the code-under-test (method_1()).
sut.method_1()

# Check the order calling
self.assertEqual(expected, source_mock.mock_calls)

if __name__ == '__main__':
unittest.main()
Но я не могу заполнить метод test_call_order () .
спасибо

Подробнее здесь: https://stackoverflow.com/questions/744 ... ed-context

Вернуться в «Python»