Best Practices für Haskell QuickCheck (insbesondere beim Testen von Typklassen)

Ich habe gerade angefangen, QuickCheck mit einer Reihe von Haskell-Code zu verwenden. Ich bin hinter der Zeit, ich weiß. Diese Frage ist zweiteilig:

Was sind die allgemeinen Best Practices für Quick Check? Bisher habe ich Folgendes aufgegriffen:

Nennen Sie Ihre Tests prop_ * (ärgerlich, weil alles andere camelCase ist)Teste exportierten Code (wenn du Interna testest, machst du es wahrscheinlich falsch)Testeigenschaften, keine BeispieleSag es nichtX is out of range, Y is in rangeSagen Sie stattdessenif x is out of range, normalize x ≠ x (oder eine andere solche Eigenschaft)

Aber ich greife immer noch nach anderen Best Practices. Insbesondere:

Wo werden Immobilien aufbewahrt?Die gleiche Datei?in einemtest/ Verzeichnis? (Wenn ja, wie importieren Sie das Material insrc/?)in einemProperties/ Verzeichnis untersrc?

Was ist am wichtigsten, wie testen wir Eigenschaften für Typklassen? Betrachten Sie beispielsweise die folgende (vereinfachte) Typklasse:

<code>class Gen a where
    next :: a -> a
    prev :: a -> a
</code>

Ich möchte die Immobilie testen∀ x: prev (next x) == x. Dies beinhaltet natürlich das Schreiben von Tests für jede Instanz. Es ist mühsam, für jede Instanz dieselbe Eigenschaft zu schreiben, insbesondere wenn der Test komplizierter ist. Wie verallgemeinert man solche Tests?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage