2015-11-17 2 views
1

Я пытаюсь получить простой модульный тест для работы, написанный на HUnit.Взаимодействие Кабала и HUnit

Модуль, который я проверил, называется «MyTests».

module MyTests where 
import qualified Test.HUnit as H 
gamma = H.TestCase (H.assertEqual "foo" 1 1) 
-- Run the tests from the REPL 
runTestTT $ H.TestList [H.TestLabel "foo" gamma] 

я могу запустить этот модуль прекрасно от Кабал РЕПЛ:

λ> run 
Cases: 1 Tried: 1 Errors: 0 Failures: 0 
Counts {cases = 1, tried = 1, errors = 0, failures = 0} 

Я хочу, чтобы интегрировать эти тесты с Кабал таким образом, что я могу запустить cabal test.

От нескольких часов прибегая к помощи я обнаружил, что я должен быть в состоянии проверить мое приложение с помощью следующей seqeuence:

cabal configure --enable-tests && cabal build tests && cabal test 

Я вставил следующий в моем .cabal файле:

Test-Suite tests 
    type:   exitcode-stdio-1.0 
    main-is:  Main.hs 
    hs-source-dirs: test src 
    test-module: YourTestModule 
    build-depends: base 
        , HUnit 
        , Cabal 
        , QuickCheck 
        , test-framework 
        , test-framework-hunit 
        , test-framework-quickcheck2 

В Main.hs файл в папке test/ у меня есть следующее:

module Main where 

import Test.Framework (defaultMain, testGroup) 
import Test.Framework.Providers.HUnit 
import Test.Framework.Providers.QuickCheck2 (testProperty) 

import Test.QuickCheck 
import Test.HUnit 

import Data.List 

import qualified MyTests as AG 


main = defaultMain tests 

tests = [ 
     testGroup "Some group" [ 
       testCase "foo" AG.gamma   
      ] 
    ] 

Это, очевидно, возвращает ошибку:

test/Main.hs:19:32: 
    Couldn't match type ‘Test’ with ‘IO()’ 
    Expected type: Assertion 
     Actual type: Test 
    In the second argument of ‘testCase’, namely ‘AG.gamma’ 
    In the expression: testCase "foo" AG.gamma 

мне очень нравится HUnit тесты, которые я написал до сих пор (это MWE) и мне интересно, я могу HW интегрировать эти тесты с Афоризм?

ответ

0

Проблема в том, что AG.gamma имеет тип Test, начиная с TestCase :: Assertion -> Test.

Итак, у HUnit есть один способ создания деревьев тестов, а test-framework имеет другой способ создания деревьев тестов, используя функцию testCase :: TestName -> Assertion -> Test.

Следовательно, вы не можете взять HUnit.Test и передать его testCase. Но оказывается, что вы можете принять HUnit.Test и конвертировать его в test-framework тест (или, скорее, список из них).

Используйте другую функцию от test-framework модуля:

hUnitTestToTests :: HUnit.Test -> [TestFramework.Test] 

(подпись пополнена, чтобы показать, где модули поставляются с).

Смотрите здесь для более подробной информации:

https://hackage.haskell.org/package/test-framework-hunit-0.3.0.2/docs/Test-Framework-Providers-HUnit.html

Смежные вопросы