Hypothesis — это семейство библиотек тестирования, которые позволяют писать тесты, параметризованные источником примеров. Затем реализация гипотезы генерирует простые и понятные примеры, которые приводят к провалу ваших тестов. Это упрощает написание тестов и в то же время делает их более мощными, позволяя программному обеспечению автоматизировать скучные операции и выполнять их в соответствии с более высокими стандартами, чем это сделал бы человек, позволяя вам сосредоточиться на логике тестирования более высокого уровня.
Этот вид тестирования часто называют «тестированием на основе свойств», и наиболее широко известной реализацией этой концепции является библиотека Haskell QuickCheck, но Hypothesis существенно отличается от QuickCheck и разработан так, чтобы идиоматически и легко вписаться в существующие стили тестирования, которые вы можете использовать. привыкли, совершенно не зная Haskell или функционального программирования.
Hypothesis для Python — это оригинальная реализация, единственная, которая в настоящее время полностью готова к работе и активно поддерживается.
Основные идеи гипотезы не зависят от языка и в принципе подходят для любого языка. Мы заинтересованы в разработке и поддержке реализаций для широкого спектра языков, но в настоящее время у нас нет для этого ресурсов, поэтому наши усилия по портированию в основном касаются прототипов.
Две прототипные реализации Hypothesis для других языков:
Кроме того, существует порт основного движка Hypothesis, Conjecture на Rust. Это не полная функциональность, но в долгосрочной перспективе мы надеемся перенести большую часть существующих функций на Rust и перестроить Hypothesis для Python поверх него, что значительно сократит усилия по портированию на другие языки.
Любое или все из них можно превратить в полноценные реализации с относительно небольшими усилиями (не более нескольких месяцев полной занятости), но, помимо первоначальной работы, для этого потребуется кто-то, готовый обеспечить или финансировать текущие усилия по их обслуживанию. чтобы быть жизнеспособным.