Frage

Also ich versuche HTF zu verwenden, um einige hunit-Stil Behauptungen laufen

% cat tests/TestDemo.hs
{-# OPTIONS_GHC -Wall -F -pgmF htfpp #-}
module Main where
import Test.Framework
import Test.HUnit.Base ((@?=))
import System.Environment (getArgs)

-- just run some tests
main :: IO ()
main = getArgs >>= flip runTestWithArgs Main.allHTFTests

-- all these tests should fail
test_fail_int1 :: Assertion
test_fail_int1 = (0::Int) @?= (1::Int)

test_fail_bool1 :: Assertion
test_fail_bool1 = True @?= False

test_fail_string1 :: Assertion
test_fail_string1 = "0" @?= "1"

test_fail_int2 :: Assertion
test_fail_int2 = [0::Int] @?= [1::Int]

test_fail_string2 :: Assertion
test_fail_string2 = "true" @?= "false"

test_fail_bool2 :: Assertion
test_fail_bool2 = [True] @?= [False]

Und wenn ich ghc --make verwenden, so scheint es richtig zu arbeiten.

% ghc --make tests/TestDemo.hs
[1 of 1] Compiling Main             ( tests/TestDemo.hs, tests/TestDemo.o )
Linking tests/TestDemo ...
% tests/TestDemoA
...
* Tests:    6
* Passed:   0
* Failures: 6
* Errors:   0

Failures:
  * Main:fail_int1 (tests/TestDemo.hs:9)
  * Main:fail_bool1 (tests/TestDemo.hs:12)
  * Main:fail_string1 (tests/TestDemo.hs:15)
  * Main:fail_int2 (tests/TestDemo.hs:19)
  * Main:fail_string2 (tests/TestDemo.hs:22)
  * Main:fail_bool2 (tests/TestDemo.hs:25)

Aber wenn ich Clique um ihn zu bauen, nicht alle Tests, die ausfallen, fehlschlagen.

% cat Demo.cabal
...
executable test-demo
  build-depends: base >= 4, HUnit, HTF
  main-is: TestDemo.hs
  hs-source-dirs: tests
% cabal configure
Resolving dependencies...
Configuring Demo-0.0.0...
% cabal build
Preprocessing executables for Demo-0.0.0...
Building Demo-0.0.0...
[1 of 1] Compiling Main             ( tests/TestDemo.hs, dist/build/test-demo/test-demo-tmp/Main.o )
Linking dist/build/test-demo/test-demo ...
% dist/build/test-demo/test-demo
...
* Tests:    6
* Passed:   3
* Failures: 3
* Errors:   0

Failures:
  * Main:fail_int2 (tests/TestDemo.hs:23)
  * Main:fail_string2 (tests/TestDemo.hs:26)
  * Main:fail_bool2 (tests/TestDemo.hs:29)

Was läuft da falsch und wie kann ich es beheben?

War es hilfreich?

Lösung

Das ist ein Fehler in bestimmten Versionen von GHC, zu dem Optimierer im Zusammenhang Entfernen wirft IO Ausnahmen in einigen Fällen. Es ist sehr häufig mit hunit Code, wenn Optimierungen aktiviert sind. Und Kabale Sätze -O1 standardmäßig, die den Fehler ermöglicht.

Ein Upgrade auf GHC 7 wird es (nicht wirklich, bis Bibliotheken empfohlen damit, IE eine Haskell-Plattform-Release wird für GHC 7 gefangen).

Sie können auch -O0 in den Compiler-Optionen in der .cabal Datei Strophe im Zusammenhang mit Ihrem Test ausführbar setzen. Das ist, was ich für mein Testcode getan, bis ich bereit bin zu meinem Projekt GHC 7 zu bewegen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top