我试图编写一个(小)可执行文件,使用Cabal进行设置,使用HSpec进行单元测试。我的几乎所有代码都在一个单独的模块中Library
,包括main
的正文,我将其作为run
函数导入到我的主模块中
-- In src/Hecho.hs
module Main where
import Library(run)
main :: IO ()
main = run
尽管main
函数现在可以像我想的那样短,但有没有办法可以为它编写测试,比如检查它是否等于run函数,或者可能测试一下另一种方式?问题是我的spec文件定义了另一个Main
模块,而我似乎无法(或者至少我无法弄清楚)从另一个模块中导入任何内容{ {1}}模块。
例如,如果我尝试以下
Main
然后我收到错误:
-- In test/HechoSpec.hs
module Main where
import Library
import Main
import Test.Hspec
main :: IO ()
main = hspec $ do
-- Test definitions
有没有办法测试主要功能?
答案 0 :(得分:1)
更新的答案:显然问题是如何确保Library.run
与main
相同。
答案是不可能做到这一点。 main
是IO ()
类型的值,并且没有为IO操作定义Eq
。例如,此程序不会键入check:
main = print "Hello"
foo = main
fooEqualsMain = foo == main