Ich habe gerade angefangen, QuickCheck mit einer Menge Haskell-Code zu verwenden. Ich bin hinter der Zeit zurück, ich weiß. Diese Frage ist ein zweiteiliger:Haskell QuickCheck Best Practices (besonders beim Testen von Klassen)
Erstens, was sind die allgemeinen Best Practices für Quick Check? Bisher habe ich folgendes aufgenommen:
- Namen Ihre Tests prop_ * (ärgerlich, denn alles andere ist Camelcase)
- -Test exportierten Code (wenn Sie Interna sind Testen Sie wahrscheinlich, es zu tun falsch)
- Testeigenschaften, keine Beispiele
- sagen Sie nicht
X is out of range, Y is in range
- Stattdessen sagen
if x is out of range, normalize x ≠ x
(oder eine andere solche Eigenschaft)
- sagen Sie nicht
Aber ich fasse immer noch andere Best Practices. Besonders:
- Wo bleiben die Eigenschaften?
- Die gleiche Datei?
- in einem Verzeichnis
test/
? (Wenn ja, wie importieren Sie dann das Zeug insrc/
?) - in einem
Properties/
Verzeichnis untersrc
?
Am wichtigsten ist, wie wir neigen dazu, über die Prüfung Eigenschaften auf Typklassen zu gehen? Betrachten wir zum Beispiel die folgende (vereinfachte) Typklasse:
class Gen a where
next :: a -> a
prev :: a -> a
ich die Eigenschaft ∀ x: prev (next x) == x
testen möchten. Natürlich beinhaltet dies das Schreiben von Tests für jede Instanz. Es ist mühsam, die gleiche Eigenschaft für jede Instanz zu schreiben, besonders wenn der Test komplizierter ist. Wie kann man solche Tests standardisieren?
Für die Einfuhr, wenn parallel mit 'src /' und 'Test /' Verzeichnisse, Sie wollen 'Hs-Quelle-Dirs einzustellen: src, test' in Ihrer' .cabal' Datei, so dass beide Verzeichnisse sind im Modul Suchpfad. – hammar
Warum können Interna keine Eigenschaften haben? – alternative
Sie können es sicherlich, es ist nur schwieriger, Tests zu ihnen zu bekommen und (nach meiner Erfahrung) ist es viel nützlicher, exportierte Verhalten anstelle von Implementierungsdetails zu testen. – So8res