Почему cabal test считает все тесты пройденными?

Решил что даже свой небольшой личный проект лучше вести по-человечески, в том числе написать для него тесты. Вот фрагмент Blabla.cabal:
test-suite blabla-test
    main-is:            Test.hs
    hs-source-dirs:     tests, src
    build-depends:      base >=4 && < 5, parsec >= 3, HUnit >= 1
    type:               exitcode-stdio-1.0
    default-language:   Haskell2010

Вот tests/Test.hs:
import Test.HUnit
import Text.ParserCombinators.Parsec hiding (spaces)

-- src/Module1.hs, src/Module2.hs, ...
import Module1
import Module2

...

test1 = ...

test2 = ...

...

tests = TestList [test1, test2, ...]

main = runTestTT tests


Запускаю cabal configure && cabal build && cabal test
Пишет типа blabla-test: PASSED

Захожу в файл с логами, там строки:
### Failure in: 1
test1 description ...
expected: 1
 but got: 2


Почему ошибка только в логах? Каждый раз что ли в них лезть чтобы проверить, пройден ли тест? Гугл не помог, не нашёл ни одного похожего вопроса на Stackoverflow

P. S. Тест точно не должен проходить, я специально неправильно его написал
  • Вопрос задан
  • 244 просмотра
Решения вопроса 2
Выше ответили, я прокомментирую. main должна иметь тип IO t, где t — любой тип, результат будет проигнорирован. Чтобы вернуть exitcode отличный от нуля, надо пользоваться соответствующими функциями: exitWith, exitFailure и прочими. Судя по всему, HUnit этого автоматически не делает, возвращая лишь статистику, которая игнорируется.
Посему вам надо написать функцию, которая вызовет exitFailure сама, если errors или failures в Counts больше нуля.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы