Najlepsze praktyki Haskell QuickCheck (zwłaszcza podczas testowania klas typów)
Właśnie zacząłem używać QuickCheck z kilkoma kodami Haskell. Wiem, że jestem za czasami. To pytanie ma dwie strony:
Po pierwsze, jakie są ogólne najlepsze praktyki Quick Check? Do tej pory wybrałem następujące:
Nazwij swoje testy prop_ * (denerwujące, ponieważ wszystko inne to CamelCase)Przetestuj wyeksportowany kod (jeśli testujesz elementy wewnętrzne, prawdopodobnie robisz to źle)Właściwości testowe, a nie przykładyNie mówX is out of range, Y is in range
Zamiast tego powiedzmyif x is out of range, normalize x ≠ x
(lub jakąś inną taką własność)Ale nadal chwytam się innych najlepszych praktyk. Szczególnie:
Gdzie są przechowywane nieruchomości?Ten sam plik?wtest/
informator? (Jeśli tak, to w jaki sposób importujesz rzeczysrc/
?)wProperties/
katalog podsrc
?Co najważniejsze, jak mamy tendencję do testowania właściwości klas klas? Rozważmy na przykład następującą (uproszczoną) klasę typu:
<code>class Gen a where next :: a -> a prev :: a -> a </code>
Chciałbym przetestować nieruchomość∀ x: prev (next x) == x
. Oczywiście wymaga to pisania testów dla każdej instancji. Nudne jest pisanie tej samej właściwości dla każdej instancji, zwłaszcza gdy test jest bardziej skomplikowany. Jaki jest standardowy sposób generalizowania takich testów?