Hypothesis ist eine Familie von Testbibliotheken, mit denen Sie Tests schreiben können, die durch eine Beispielquelle parametrisiert werden. Eine Hypothesenimplementierung generiert dann einfache und verständliche Beispiele, die Ihre Tests zum Scheitern bringen. Dies vereinfacht das Schreiben Ihrer Tests und macht sie gleichzeitig leistungsfähiger, da die Software die langweiligen Teile automatisiert und auf einem höheren Niveau als ein Mensch ausführt, sodass Sie sich auf die Testlogik auf höherer Ebene konzentrieren können.
Diese Art des Testens wird oft als „eigenschaftenbasiertes Testen“ bezeichnet, und die bekannteste Implementierung des Konzepts ist die Haskell-Bibliothek QuickCheck. Hypothesis unterscheidet sich jedoch erheblich von QuickCheck und ist so konzipiert, dass es sich idiomatisch und einfach in bestehende Teststile einfügt, die Sie verwenden sind es gewohnt, ohne dass eine Vertrautheit mit Haskell oder funktionaler Programmierung erforderlich ist.
Hypothese für Python ist die ursprüngliche Implementierung und die einzige, die derzeit vollständig produktionsbereit ist und aktiv gewartet wird.
Die Kernideen der Hypothese sind sprachunabhängig und im Prinzip für jede Sprache geeignet. Wir sind daran interessiert, Implementierungen für eine Vielzahl von Sprachen zu entwickeln und zu unterstützen, aber derzeit fehlen dafür die Ressourcen, sodass es sich bei unseren Portierungsbemühungen größtenteils um Prototypen handelt.
Die beiden Prototyp-Implementierungen von Hypothesis für andere Sprachen sind:
Zusätzlich gibt es eine Portierung der Kern-Engine von Hypothesis, Conjecture, nach Rust. Der Funktionsumfang ist noch nicht vollständig, aber auf lange Sicht hoffen wir, einen Großteil der vorhandenen Funktionalität nach Rust zu verlagern und Hypothesis for Python darauf neu zu erstellen, wodurch der Portierungsaufwand auf andere Sprachen erheblich verringert wird.
Einige oder alle davon könnten mit relativ geringem Aufwand (nicht mehr als ein paar Monate Vollzeitarbeit) in vollwertige Implementierungen umgewandelt werden, aber zusätzlich zu den anfänglichen Arbeiten wäre dafür jemand erforderlich, der bereit ist, die laufenden Wartungsarbeiten dafür bereitzustellen oder zu finanzieren um lebensfähig zu sein.