Как поместить модуль в тестовую проводку с pytest? - PullRequest
0 голосов
/ 07 февраля 2019

скажем, у меня есть файл с именем boop.py

, который гласит:

import module_a
import sys

def boop(value):
    val = module_a.boop_it(value)
    # ...
    return val

Мои вопросы:

  • , когда яя делаю тесты для этого, как я могу сделать module_a пустым модулем?Я понимаю, что мне нужно изолировать зависимости.Я просто не понимаю его механики

  • Нужно ли его полностью изолировать?Если я этого не сделаю, это укусит меня?

Обратите внимание, что это весь устаревший код, который уже существует и имеет годы истории

1 Ответ

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

Чтобы ответить на ваш второй вопрос «Нужно ли его полностью изолировать?»: Это зависит.Даже если вы проводите модульное тестирование, вам обычно не нужно изолировать свой код от всех зависимостей.Например, вы бы не изолировали свой код от math.sin().Я бы даже сказал, что создания тестовых двойников следует избегать, если только на это нет причины.На практике, однако, достаточно часто есть причина.

Вот некоторые критерии, которые могут помочь вам решить для вашего module_a, беспокоит ли вас зависимость при юнит-тестировании.Все они относятся к свойствам зависимого компонента («DOC», в вашем случае module_a), включая его транзитивные зависимости и цели тестирования:

  • Можете ли вы принести DOCво все желаемые состояния / можете ли вы гарантировать, что с DOC вы действительно сможете выполнить все интересные тестовые сценарии?Если нет, лучше изолировать, чтобы вы могли проверить свой код всеми желаемыми способами.
  • Вызывает ли DOC какое-либо недерминистское поведение (дата / время, случайность, сетевые подключения)?Тогда лучше изолируйте свой код, чтобы сделать тесты детерминированными.
  • Вызывает ли вызов DOC недопустимо длительное выполнение теста?Если это так, изолируйте для обеспечения приемлемого времени выполнения теста.
  • Имеет проблемы со стабильностью (зрелостью) DOC, которые делают тесты ненадежными по отношению к вашему компоненту, или, что еще хуже, DOC еще даже недоступен (не применимо в вашем конкретном примере)?Если это так, вам лучше изолировать (или даже просто сделать это) просто для того, чтобы ваши тесты выполнялись и предоставлять достоверные результаты по вашему собственному коду.

Но даже если приведенные выше критерии указывают на то, что зависимость вызывает беспокойствоВы: Имейте в виду, что некоторая переделка кода может быть предпочтительнее создания тестовых пар.Например, отделение вычислений от взаимодействий путем помещения каждого из них в различные функции может избавить вас от некоторых насмешек: вы проверяете вычисления с помощью модульного тестирования и взаимодействий с интеграционным тестированием.

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