0

我正在尝试编写一个(小)可执行文件,使用 Cabal 进行设置,使用 HSpec 进行单元测试。几乎我所有的代码都在一个单独的模块中Library,包括的主体,我将其作为函数main导入到我的主模块中run

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

main :: IO ()
main = run

虽然这个main函数现在和我想的一样短,但有没有办法可以为它编写一个测试,比如检查它是否等于 run 函数,或者以其他方式测试它?问题是我的规范文件定义了另一个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.runmain.

答案是不可能做到这一点。main是一个类型的值,IO ()并且没有Eq为 IO 操作定义。例如,这个程序不输入检查:

main = print "Hello"

foo = main

fooEqualsMain = foo == main
于 2014-11-30T17:10:16.790 回答