2016-05-25 12 views
2

テストのためにモジュールをインポートする際に問題があります。私はLoadTestLoadにインポートしてテストします。私はhs-source-dirsにソースディレクトリとの両方のパッケージnsgaとテストパッケージの徒党ファイルにbuild-dependsにモジュールLoadを追加しようとしましたが、私はTestLoad.hsimport Loadにしようとすると、GHCはまだCould not find module Load文句を言います。テストのためのモジュールのインポート

また、テストの構造やファイル名の付け方についても興味があります。以下のアプローチは正しいですか?

ディレクトリ構造:

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

徒党ファイル:

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

私はあなたを考えます'exposed-modules:Load'を追加するだけです(' other-modules'ではなく、b eは 'nsga'に隠されています(通常は* lib *を追加します)。テストスイートの' hs-source-dirs'に 'src 'を追加する必要はありません。 – Carsten

+0

あなたはそれを見たいと思っているなら* 'stack'をつかんでテンプレートの一つを試してみること - 例えば' stack new LetsLook franklinchen'(これは* lib *を含む 'franklinchen'テンプレートを使います。 libとテストスイートを使って*実行可能ファイル* libをテストする) – Carsten

+0

'exposed-modules:Load'を追加できませんでした – tsorn

答えて

3

build-dependsからLoad -any行を削除してください。

build-dependsパッケージの名前を指しますが、Load.hsモジュールです。あなたのシステムにLoadというパッケージがインストールされていますか?

FWIWは、これは私の作品:

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

テスト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 

実行して、使用して:

cabal configure 
cabal build 
cabal test 
+0

コマンドファイルで' TestLoad.hs'を実行しただけでは、無視される?最初に.exeをビルドする必要がありますか? – tsorn

+0

"コマンドファイルで"あなたが何を意味するか分かりません。 'ghc'または' ghci'を自分で実行すると、カバールファイルは無視されます。 'cabal'はカバールファイルを使って' ghc'と 'ghci'を呼び出す方法を理解します。 – ErikR

+0

申し訳ありませんが、コマンドラインを意味します。 'ghci'。だから私はテストを実行するためにexeを構築する必要がありますか?これは今コンパイルされますが、実際に 'cabal test'を実行するとテストは実行されません(例:/test/Main.hs:' i = TestCase(assertBool "mytest3" True) ') – tsorn

関連する問題