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

时间:2014-11-30 15:18:53

标签: 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函数,或者可能测试一下另一种方式?问题是我的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

有没有办法测试主要功能?

1 个答案:

答案 0 :(得分:1)

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

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

main = print "Hello"

foo = main

fooEqualsMain = foo == main