2016-05-25 14 views
2

Ich habe Probleme beim Importieren eines Moduls zum Testen. Ich möchte Load in TestLoad importieren, um es zu testen. Ich habe versucht, das Quellverzeichnis zu hs-source-dirs und sowohl das Paket nsga und das Modul Load zu build-depends in der Cabal-Datei für das Testpaket hinzufügen, aber GHC klagt immer noch Could not find module Load, wenn ich versuche, import Load in TestLoad.hs.Importieren von Modulen zum Testen

Ich bin auch neugierig auf die Struktur der Tests und wie man die Dateien benennen. Ist der folgende Ansatz korrekt?

Verzeichnisstruktur:

nsga/ 
    src/ 
     Main.hs 
     Load.hs 
    test/ 
     TestMain.hs 
     TestLoad.hs 

Die Kabalen-Datei:

executable nsga 
    main-is: Main.hs 
    build-depends: 
     QuickCheck -any, 
     base -any, 
     doctest -any 
    default-language: Haskell2010 
    hs-source-dirs: src 
    other-modules: 
     Load 
    ghc-options: -ferror-spans -Wall -fsimpl-tick-factor=10 

test-suite test-nsga 
    type: exitcode-stdio-1.0 
    main-is: TestMain.hs 
    build-depends: 
     QuickCheck -any, 
     base -any, 
     doctest -any, 
     HUnit -any, 
     nsga -any, 
     Load -any 
    default-language: Haskell2010 
    hs-source-dirs: test, src 
    other-modules: 
     TestLoad 
    ghc-options: -ferror-spans 
+0

Ich glaube, Sie muss nur 'exposed-modules: Load' hinzufügen (nicht zu' other-modules' - es wird b (dort versteckt) zu 'nsga' (normalerweise fügst du eine * lib * für dieses Zeug hinzu) - du solltest' src' nicht zu den 'hs-source-dirs' der Testsuite hinzufügen müssen. – Carsten

+0

Wenn du es * in Aktion sehen willst, empfehle ich 'stack' und probiere einfach eine der Templates aus - zum Beispiel' stack new LetsLook franklinchen' (dies wird die 'franklinchen' Vorlage benutzen, die eine * lib * enthält, eine * ausführbare * mit der lib und eine * test-suite * testet die lib) – Carsten

+0

Hinzufügen von 'exposed-modules: Load' hat nicht funktioniert – tsorn

Antwort

3

Versuchen Sie, die Load -any Linie von der build-depends entfernen.

build-depends bezieht sich auf Namen von Pakete, aber Load.hs ist ein Modul . Ist auf Ihrem System das Paket Load installiert?

FWIW, das für mich funktioniert:

Datei-Layout:

├── app 
│   ├── Load.hs 
│   └── Main.hs 
├── src 
│   └── Lib.hs 
├── test 
│   └── Spec.hs 
└── test-load.cabal 

Test-load.cabal:

name:    test-load 
version:    0.1.0.0 
build-type:   Simple 
extra-source-files: README.md 
cabal-version:  >=1.10 

executable the-app 
    default-language: Haskell2010 
    hs-source-dirs:  app 
    main-is:    Main.hs 
    build-depends:  base 

test-suite spec 
    default-language: Haskell2010 
    ghc-options:   -Wall 
    type:    exitcode-stdio-1.0 
    hs-source-dirs:  test, app 
    main-is:    Spec.hs 
    build-depends:  base, Load -any 

Run mit:

cabal configure 
cabal build 
cabal test 
+0

Wenn ich nur' TestLoad.hs' in der Befehlsdatei ausführen, dann ist die Cabal-Datei ignoriert? Ich muss zuerst eine .exe erstellen? – tsorn

+0

Ich bin mir nicht sicher, was Sie mit "in der Befehlsdatei" meinen. Wenn Sie 'ghc' oder' ghci' selbst ausführen, wird die cabal-Datei ignoriert. 'cabal' verwendet die cabal-Datei, um herauszufinden, wie' ghc' und 'ghci' aufgerufen werden. – ErikR

+0

Sorry, bedeutet Befehlszeile, z.B. 'Ghci'. Also muss ich die exe bauen, um den Test zu starten? Es wird jetzt kompiliert, jedoch werden keine der Tests ausgeführt, wenn 'cabal test' ausgeführt wird (Beispiel in /test/Main.hs:' i = TestCase (assertBool "mytest3" True) ') – tsorn

Verwandte Themen