Unit testing 单元测试主要功能:导入自身错误
我正在尝试编写一个(小)可执行文件,使用Cabal进行设置,使用HSpec进行单元测试。几乎我所有的代码都在一个单独的模块中,Unit testing 单元测试主要功能:导入自身错误,unit-testing,haskell,functional-programming,hspec,Unit Testing,Haskell,Functional Programming,Hspec,我正在尝试编写一个(小)可执行文件,使用Cabal进行设置,使用HSpec进行单元测试。几乎我所有的代码都在一个单独的模块中,Library,包括main的主体,我将其作为run函数导入到我的主模块中 -- In src/Hecho.hs module Main where import Library(run) main :: IO () main = run 虽然main函数现在已经尽我所能地短了,但是有没有一种方法可以为它编写测试,比如检查它是否等于run函数,或者用其他方法测试它?问
Library
,包括main
的主体,我将其作为run
函数导入到我的主模块中
-- In src/Hecho.hs
module Main where
import Library(run)
main :: IO ()
main = run
虽然main
函数现在已经尽我所能地短了,但是有没有一种方法可以为它编写测试,比如检查它是否等于run函数,或者用其他方法测试它?问题是我的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
有没有办法测试主功能?更新的答案:显然问题是如何确保
库。run
与main
相同
答案是不可能做到这一点main
是类型为IO()
的值,没有为IO操作定义Eq
。例如,此程序不进行类型检查:
main = print "Hello"
foo = main
fooEqualsMain = foo == main
从我的测试文件中删除
模块Main
没有任何效果,我得到了相同的错误。从这个角度看,Haskell在未指定模块时有效地插入了一个模块Main(Main)
。Ok。也许您可以为应用程序的主模块使用AppMain.hs
?我的应用程序的主模块已经在一个文件Hecho.hs
中,根据我所阅读的内容,我认为main
函数需要位于名为main
的模块中,以便在可执行文件运行时运行。将Library
导入测试并使用run
函数如何?您已经在Hecho.hs
中定义了main=run
,因此它们是相同的函数。我已经在这样做了,我可以测试run函数,但我的目标是测试main
函数:至少它等于run
。