Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 单元测试主要功能:导入自身错误_Unit Testing_Haskell_Functional Programming_Hspec - Fatal编程技术网

Unit testing 单元测试主要功能:导入自身错误

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函数,或者用其他方法测试它?问

我正在尝试编写一个(小)可执行文件,使用Cabal进行设置,使用HSpec进行单元测试。几乎我所有的代码都在一个单独的模块中,
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