单元测试主函数:导入自身错误



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

-- In src/Hecho.hs
module Main where
import Library(run)
main :: IO ()
main = run

尽管main函数现在和我认为的一样短,但我有没有办法为它编写一个测试,比如检查它是否等于运行函数,或者以其他方式测试它?问题是我的 spec 文件定义了另一个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

有没有办法测试主函数?

更新的

答案:显然问题是如何确保Library.runmain相同。

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

main = print "Hello"
foo = main
fooEqualsMain = foo == main

相关内容

  • 没有找到相关文章

最新更新