Эта статья является переводом страницы Hypothesis — Quick start guide взятой из официального руководства. Я не смог найти какой то полезной информации на русском языке по использованию Гипотезы, кроме выступления  23 ноября 2017 г. Александра Шорина на "Moscow Python Meetup 50". Решил разобраться. В итоге что то перевел. Вот, решил поделиться. Этот документ должен рассказать вам обо всем, что вам нужно, чтобы начать работу с hypothesis. Предположим, мы написали run length encoding систему, и хотим проверить, что она умеет. У нас есть следующий код, который я взял прямо из Rosetta Code wiki (ОК, я удалил какой-то прокомментированный код и исправил форматирование, но не модифицировал функции): Мы хотим написать тест для этой пары функций, который проверит некоторый инвариант из их должностных обязанностей. Инвариант, когда у вас есть такого рода encoding/decoding заключается в том, что если вы кодируете что-то, а затем декодируете это, то получаете то же самое значение назад.  Давайте посмотрим, как это можно сделать с помощью Hypothesis: (Для этого примера мы просто позволим pytest обнаружить и запустить тест. О других способах, которыми вы могли бы запустить его, мы расскажем позже). Функция text возвращает то, что Hypothesis называет стратегией поиска. Объект с методами которые описывают, как произвести и упростить некоторые виды значений. Затем декоратор @given берет наш тест функции и превращает его в параметризованный, который при вызове будет выполнять тестовую функцию по широкому диапазону совпадающих данных из этой стратегии. Во всяком случае, этот тест сразу находит ошибку в коде: Прим: Локальная переменная character, упоминается до присвоения Hypothesis правильно указывает на то, что этот код просто неправильный, если он вызван для пустой строки. Если мы исправим это, просто добавив следующий код в начало функции, тогда Hypothesis скажет нам, что код правильный (ничего не делая, как вы и ожидали проходя тест). Если бы мы хотели убедиться, что этот пример всегда будет проверяться, мы могли бы добавить его явно: Вам не обязательно этого делать, но это может быть полезно: как для ясности, так и для надежного поиска примеров. Также в рамках локального "обучения", в любом случае, Hypothesis будет помнить и повторно использовать примеры, но вот для обмена данными в вашей системе непрерывной интеграции (CI) в настоящее время нет приемлемого хорошего рабочего процесса. Также стоит отметить, что аргументы ключевых слов example, и given могут быть как именованными, так и позиционными. Следующий код сработал бы так же хорошо: Предположим, у нас была более интересная ошибка и мы забыли перезагрузить счетчик
в цикле. Скажем, мы пропустили строку в нашем методе encode: Hypothesis быстро проинформирует нас в следующем примере: Обратите внимание, что представленный пример действительно очень прост. Hypothesis не просто
находит любой попавшийся пример для ваших тестов, он знает, как упростить примеры
которые он находит для создания маленьких и легко понятных. В этом случае два идентичных
значений достаточно, чтобы установить счетчик на число, отличное от одного, за которым следует
другое значение, которое должно было бы сбросить счет, но в этом случае
не сделало. Примеры Hypothesis представляют собой действительный код Python, который вы можете запустить. Любые аргументы, которые вы явно указываете при вызове функции, не генерируются Hypothesis-ом, и если вы явно предоставляете все аргументы, Hypothesis просто вызовет базовую функцию один раз, а не будет запускать ее несколько раз. Hypothesis является available on pypi as "hypothesis". Вы можете установить его с помощью: Если вы хотите установить непосредственно из исходного кода (например, потому что вы хотите
внести изменения и установить измененную версию) вы можете сделать это с: Вы, вероятно, должны сначала запустить тесты, чтобы убедиться, что ничего не сломано. Вы можете сделать это так: Обратите внимание, что если они еще не установлены, будет предпринята попытка установить тестовые зависимости. Вы можете сделать все это в virtualenv.  Например, так: Создаст изолированную среду для вас, чтобы попробовать Hypothesis, не затрагивая установленные пакеты системы. В нашем примере выше мы просто позволяем pytest обнаружить и запустить наши тесты, но мы также могли бы запустить его явно сами: Или так unittest.TestCase: Примечание: это работает, потому что Hypothesis игнорирует любые аргументы, которые ему не было сказано предоставить (позиционные аргументы начинаются справа), поэтому аргумент self для теста просто игнорируется и работает как обычно. Это также означает, что Hypothesis будет хорошо играть с другими способами параметризации тестов. Например, он отлично работает, если вы используете приспособления pytest для некоторых аргументов и Hypothesis для других. Тест в Hypothesis состоит из двух частей: функции, которая выглядит как обычный тест в выбранной тестовой структуре, но с некоторыми дополнительными аргументами, и декоратора @given, который указывает, как предоставить эти аргументы. Вот некоторые другие примеры того, как можно это использовать: Обратите внимание, что, как мы видели в приведенном выше примере, вы можете передать аргументы @given как позиционные или именованные. Теперь вы знаете достаточно об основах, чтобы написать какие то тесты для вашего кода с помощью Hypothesis. Лучший способ учиться — это сделать, так что попробуйте. Если у вас туговато с идеями о том, как использовать этот вид теста для вашего кода, вот несколько подсказок: Если у вас возникли проблемы с запуском, не стесняйтесь и обращайтесь asking for help .  Обратно Дальше