I've been fighting with Cabal for a good portion of a day trying to make its automated testing features work with HUnit. I've read the documentation here and here, and I have my Test-Suite section set up like it shows, but whenever I try and build the package using cabal build Cabal says that the only Test-Suite type supported is exitcode-stdio-1.0. What gives?
How to use HUnit and Cabal to do Automated Testing?
4.2k views Asked by Dwilson At
2
There are 2 answers
0
risto
On
Although Dwilson's answer is good, detailed is currently not well supported. You can intergrate HUnit with cabal using exitcode-stdio-1.0 and Test.Framework.
It will output all successful and failed tests to stdout as well as fail building if tests fail. See my gist.
Related Questions in UNIT-TESTING
- Google Truth.assertThat.contains does not behave similar to List.contains
- What's the best way to breakup a large test in pytest
- How to refer to the filepath of test data in test sourcecode?
- How to mock a dynamic endpoint in Apache Camel Spring Boot
- pytest mock failing when mocking function from imported package
- Jest configuration error while running test case in teamcity
- Resolve paths dynamically based on directory where test (or tested files) is located in Jest
- One-time implementation with Jest's mockResolvedValueOnce within test remains from one test to another
- Why can't I mock the decorator of the function?
- Gitlab pipeline stuck with nx cloud issue
- How to create an improperly closed gzip file using python?
- Nest.js service structure for API integration
- uiState not updating in Tests
- Unit Tests not Compiling or Being found without mod tests in main.rs. Is this a requirement or am I missing some configuration?
- Mocking Stream or Reader in Java Junit
Related Questions in HASKELL
- Typeclass projections as inheritance
- How to generate all possible matrices given a number n in Haskell
- Is there a way to get `cabal` to detect changes to non-Haskell source files?
- How to have fixed options using Option.Applicative in haskell?
- How can I create a thread in Haskell that will restart if it gets killed due to any reason?
- Automatic Jacobian matrix in Haskell
- Haskell writing to named pipe unexpectedly fails with `openFile: does not exist (No such device or address)`
- Why does Enum require to implement toEnum and fromEnum, if that's not enough for types larger than Int?
- Non-exhaustive patterns in function compress
- How to get terms names of GADT in Template Haskell?
- Implementing eval() function with Happy parser generator
- How to count the occurences of every element in a list in Haskell fast?
- In Haskell, what does `Con Int` mean?
- Extract a Maybe from a heterogeneous collection
- Haskell, Stack, importing module shows error "Module not found"
Related Questions in CABAL
- Is there a way to get `cabal` to detect changes to non-Haskell source files?
- Problem while configuring CodeWorld through cabal run
- Is there a fundamental reason why only one library can be exposed from a package?
- How to avoid listing A as build dependency for internal library/executable E just because E depends on internal library L which depends on A?
- What is the most practical way to express a dependency on a library for which we have a local git repository with some changes?
- cabal test is inconsistent with its QuickCheck log
- Why does Cabal, unlike GHC, not automatically enable GeneralizedNewtypeDeriving if I explicitly enabled DerivingStrategies?
- How do I get cabal to pull the latest from a repository specified in source-repository-package?
- Inserting a sparse vector into a sparse matrix
- nixos 23.11 cabal install mysql-simple problem - "Missing (or bad) C libraries"
- Create a complete hoogle database for a cabal project with all dependencies included
- Haskell profiling options result in build error of "Cannot load -prof objects when GHC is built with -dynamic"
- How do I tell HLS to use hls-class-plugin?
- How to manage XMonad (and xmobar and anything else related to it) via GHCup+cabal?
- Aquamacs does not work with with Agda Mode
Related Questions in HUNIT
- What is the Haskell syntax to import modules in subdirectories?
- Mocking IO Actions: getArgs and putStrLn
- Cannot import HUnit into ghci
- Haskell: Multiple Assertions in Unit Testing?
- How to use HUnit and Cabal to do Automated Testing?
- How to unit test smart constructor that throw when construction is impossible?
- Haskell Cabal HUnit
- Create and run a minimal test suite in Haskell using Hunit only
- Cabal error: At least the following dependencies are missing:
- Interaction between optimizations and testing for error calls
- Comparison for Text.XML.Light.Element in test
- Haskell - assert a function was called
- HUnit does not allow to compile test cases if `Nothing == Nothing` condition is present in the test
- Is it possible to assert an error case in HUnit?
- HUnit testing with file dependent tests
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Background
So here's the deal, the documentation on the cabal site is "future documentation," that is, not all of those features are implemented and released yet. Cabal-install 0.14.0 comes with the
detailed-0.9interface, which is a version behind what's specified in the docs (detailed-1.0), but I haven't encountered any problems related to this yet. If you have the Haskell Platform version 2011.4 which comes with cabal-install 0.10.2 you won't be able to use thedetailed-0.9interface. You'll need to upgrade to Haskell Platform 2012.2 which comes with cabal-install 0.14.0. You could also just upgrade cabal-install separately, which is what I did because on Fedora 17 the Haskell Platform is only on 2011.4.Installation
In the documentation here you'll see an example of how to use the
detailed-0.9interface with QuickCheck. It mentions some packages that have interfaces to HUnit, QuickCheck1, and QuickCheck2, but only the package for QuickCheck2 is available on hackage. If you want the packages for the rest of the frameworks you'll need to use darcs (a VCS) to download them from this location. The command you want to run for the HUnit interface is this:darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/. You may have to adjust the .cabal file in order to get it to build, specifically it relies onghc 3.*andcabal 1.10. I changed this to my versions (ghc 4.*andcabal 1.14) and it built fine.Testing
Once you have the interface built you need to do some stuff in your test module so Cabal can run it. Specifically you'll need to import both
Distribution.TestSuiteandDistribution.TestSuite.HUnit. After that you'll need to convert your HUnit Tests to Cabal Tests, using a function provided in the HUnit interface. Here's the relevant lines of code:That's it! You should be able to run
cabal configure --enable-tests && cabal build && cabal testand see your unit tests pass (or fail).Edit
Edited to clarify that the
detailed-0.9interface is included in cabal-install 0.14.0, notdetailed-1.0.