Tests unitaires simples utilisant Cabal au lieu d'utiliser diff et make
Je voudrais réécrire mon code de test shell pour mon application Haskell afin d'utiliser uniquement Haskell et Cabal. (pour des raisons de portabilité)
Le schéma de test actuel ressemble à ceci
make -> binary -> ok or fail
make test -> diff $(binary test-in) test-supposed-out ->
J'aimerais avoir quelque chose comme
cabal build -> binary -> ok or fail
cabal test -> ...testing with test-in and test-supposed-out... ->
Quelle est la manière la plus simple de le faire s'il vous plaît?
Merci.
Réponses
Tasty est un cadre simple et polyvalent dans lequel exécuter différents types de tests. (Je l'utilise principalement pour les tests QuickCheck , que - si vous ne l'avez pas encore fait - je recommande vivement de vérifier également.)
Le type particulier de test dont vous parlez s'appelle (au moins dans Tasty) un test d' or . Ainsi, par exemple, si le programme que vous souhaitez tester était
module ComplicatedProc where
import System.IO
import System.Environment (getArgs)
complicatedProc :: String -> Handle -> IO ()
complicatedProc input outHandle = do
hPutStr outHandle $ drop 37 input ++ take 46 input
main :: IO ()
main = do
[inpFp] <- getArgs
input <- readFile inpFp
complicatedProc input stdout
alors vous pouvez changer cela en un test Tasty test/golden.hs
:
import Test.Tasty
import Test.Tasty.Golden
import ComplicatedProc (complicatedProc)
import System.IO
main :: IO ()
main = do
complicAlgo_input <- readFile "test-in"
let complicAlgo_outFp = "test-supposed-out"
defaultMain $ testGroup "Tests" -- †
[ goldenVsFile "complicatedAlgo (golden)"
"test-supposed-out" complicAlgo_outFp
( withFile complicAlgo_outFp WriteMode
$ complicatedProc complicAlgo_input )
]
Utilisez un .cabal
fichier comme
cabal-version: >=1.10
name: compli-algo
version: 5.7.6.8
build-type: Simple
-- ...
library
exposed-modules: ComplicatedProc
build-depends: base
default-language: Haskell2010
test-suite compli-algo-goldentest
main-is: golden.hs
type: exitcode-stdio-1.0
build-depends: base
, compli-algo
, tasty >=1.4 && <1.5
, tasty-golden >=2.3 && <2.4
hs-source-dirs: test
Si le programme que vous souhaitez tester a une sortie stdout
codée en dur (par exemple sous forme d' print
instructions), vous devrez peut-être pirater un peu.
† Il n'est pas vraiment nécessaire d'en avoir un testGroup
ici, mais en pratique, vous voudrez probablement avoir plusieurs tests dans ce fichier. Tasty vous permet de créer un arbre arbitraire de tests , dans n'importe quel ordre hiérarchique utile.