0

(小さな) 実行可能ファイルを作成しようとしています。Cabal を使用してセットアップし、HSpec を使用して単体テストを行いました。ほとんどすべてのコードは別のモジュールにありLibrary、 の本体を含めて、関数mainとしてメイン モジュールにインポートします。run

-- In src/Hecho.hs
module Main where
import Library(run)

main :: IO ()
main = run

関数はmain可能な限り短くなりましたが、実行関数と等しいことを確認する、または他の方法でテストするなど、テストを作成する方法はありますか? 問題は、私の仕様ファイルが別のMainモジュールを定義していて、別のモジュールから何もインポートできない (または少なくとも方法がわからない) ように見えることMainです。

たとえば、次のことを試してみると

-- In test/HechoSpec.hs
module Main where

import Library
import Main
import Test.Hspec

main :: IO ()
main = hspec $ do
  -- Test definitions

次に、エラーが発生します。

Module imports form a cycle:
  module `Main' (test/HechoSpec.hs) imports itself

メイン関数をテストする方法はありますか?

4

1 に答える 1

1

更新された回答: どうやら問題はLibrary.run、 が と同じであることを確認する方法mainです。

答えは、それは不可能だということです。maintype の値であり、IO アクションの定義IO ()はありません。Eqたとえば、次のプログラムは型チェックを行いません。

main = print "Hello"

foo = main

fooEqualsMain = foo == main
于 2014-11-30T17:10:16.790 に答える