1 of 27

Моки и с чем их едят

Для тех, кто не любит читать документацию и ковыряться в исходниках

Одинцов Тимур

(Zipsale)

2 of 27

Что будет в этой презентации

  1. Коротко поговорим о том, зачем вообще нужны моки

3 of 27

Что будет в этой презентации

  • Коротко поговорим о том, зачем вообще нужны моки
  • Рассмотрим как работает модуль mock библиотеки unittest и из каких базовых частей он состоит

4 of 27

Что будет в этой презентации

  • Коротко поговорим о том, зачем вообще нужны моки
  • Рассмотрим как работает модуль mock библиотеки unittest и из каких базовых частей он состоит
  • Покопаемся во внутренностях модуля, чтобы избавиться от “магии”

5 of 27

Зачем нужны моки

  • Экономия времени

6 of 27

Зачем нужны моки

  • Экономия времени
  • Иногда без них никак

7 of 27

8 of 27

Главный герой этого мероприятия

9 of 27

10 of 27

11 of 27

12 of 27

13 of 27

14 of 27

15 of 27

16 of 27

module1

17 of 27

module1

18 of 27

Дополнительные возможности

  1. Можно посчитать сколько раз мок вызывался
  2. С какими аргументами вызывался
  3. Узнать какие методы вызывались
  4. Имитировать тип объекта
  5. Делать доступными у мока только те атрибуты, что были доступны у оригинала
  6. И многое другое

�����

https://docs.python.org/3/library/unittest.mock.html

19 of 27

Так что же происходит там внутри

20 of 27

21 of 27

22 of 27

23 of 27

Из всего вышесказанного следует не самое очевидное, но довольно бесполезное открытие

24 of 27

Теперь немного о spec (spec_set)

Указывая spec - все атрибуты объекта (или список указанных атрибутов) кладутся в специальный словарь _mock_methods, и при вызове __getattr__ , если он не пуст - то проверяется наличие его. Если нет - то вызывается исключение

25 of 27

26 of 27

27 of 27

Вывод: копайтесь в исходниках, там нет ничего страшного, а магию оставьте для книг