Добро пожаловать в Hypothesis!


Эта статья является переводом страницы Welcome to Hypothesis! взятой из официального руководства.


*Прим. переводчика:*

Я не смог найти какой то полезной информации по использованию Гипотезы на русском языке кроме выступления 14 дек. 2017 г. Александра Шорина на "Moscow Python Meetup 50"


Hypothesis представляет собой библиотеку Python для создания модульных тестов, которые попроще писать и более эффективны при запуске, обнаруживая граничные случаи в коде, который вы бы не подумали искать. Он стабильный, мощный и легко добавляется в любой существующий набор тестов.


Алгоритм его работы, позволяя вам писать тесты, которые утверждают, что что-то должно быть истинным для каждого случая, а не только то, о чём вы догадались подумать.


Нормальный модульный тест — это что-то вроде следующего:


  1. Подготовьте некоторые данные.
  2. Выполнените некоторые операции с данными.
  3. Подтвердите результат.

Hypothesis позволяет писать тесты, которые выглядят следующим образом:


  1. Для всех данных, соответствующих некоторым спецификациям.
  2. Выполните некоторые операции с данными.
  3. Подтвердите результат.

Это часто называют property based testing, и было популяризировано в библиотеке Haskell Quickcheck


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


Написание тестов в такой форме обычно состоит из решения о гарантиях, по которым ваш код должен делать make — properties, которые должны всегда иметь значение true, независимо от того, что мир преподнесет вам. Примерами таких гарантий могут быть:


  • Ваш код не должен генерировать исключение или должен вызывать только особый тип исключения (это работает особенно хорошо, если у вас много внутренних assert-ов).
  • При удалении объекта он больше не отображается.
  • Если вы сериализуете и затем десериализуете значение, вы получите то же значение обратно.

Теперь вы знаете основы того, что делает hypothesis, остальное в документации поможет вам понять, как и почему. Она разделена на разделы, которые вы можете увидеть в боковой панели (или в верхней части меню, если вы на мобильном телефоне). Но вероятнее всего, вы хотите начать с Quick start guide или Краткого руководства по началу работы, которое даст вам работающие примеры использования hypothesis и подробный план того, что вам нужно знать, чтобы начать тестирование кода с ним, или проверить некоторые из introductory articles.


Дальше

Комментарии (9)


  1. Twost
    23.04.2018 23:07

    Впервые вижу, чтобы три поста выкладывали с разницей в 1 минуту.
    Сразу вопросов столько возникает к автору.

    Уж простите за оффтоп.


    1. AlekSandrDr
      24.04.2018 08:19
      -1

      Это перевод мануала. В чем вопрос то?! Сижу разбираюсь. Решил поделиться. Думаешь не надо было?!


      1. iroln
        24.04.2018 21:36

        Почему тогда посты не оформлены как перевод?


        1. AlekSandrDr Автор
          24.04.2018 21:43

          Замечание справедливое. и я бы рад такую печать прилепить. Но я нашел только чек tutorial


          1. iroln
            24.04.2018 21:46
            +1

            Из справки по сайту

            Перевод
            Если нажать на слово «Публикацию» во фразе «Хочу опубликовать публикацию», то ниспадающее меню предложит вам выбрать второй доступный для создания вид записи — «Перевод». Механизм создания тот же, что и у публикации, но есть два дополнительных поля — «Автор оригинала» (тут надо указать имя автора оригинального текста) и «Ссылка на оригинал» (здесь — URL страницы оригинала).


    1. pda0
      24.04.2018 12:53

      Это часто называют property based wrighting
      ;-)

      1. Для некоторой темы генерируются все возможные тексты.
      2. Разом выкладываются в блог.
      3. Подтверждается результат.


  1. kalininmr
    23.04.2018 23:07

    эх. вот бы кто для подготовки тестовых данных чтонть удобное сделал.
    желательно и моки чтоб умел сам готовить и данные любые както паковать.

    сам неоднократно пробовал, но всеравно неудобно получается. если достаточно сложные данные подготовка занимает кучу времени.


    1. AlekSandrDr
      24.04.2018 08:28

      Был и есть (только для 2-го ) такой Pythoscope. На третий поднять не получается. Собственно, когда искал аналог и нашел гипотезу. Правда это не совсем аналог.

      На счет сложных данных, это конечно проблема. Гипотезу много кто применяет посмотри как они ее используют. Может поможет. Есть расширения .


      1. kalininmr
        24.04.2018 12:14

        да нет там такого, что хочется.
        желательно как генерировать: записывается кудато(тут то всё просто) и что пришло на вход, что получили из внешних сервисов. на основании этого уже в тесте работают моки. с возможностью подкорректировать руками конечно.