"Could not find module ‘Test.HUnit’" 在 CodeRunner 中执行 Haskell 的单元测试 (HUnit) 时出错
"Could not find module ‘Test.HUnit’" Error when executing Haskell's unittest (HUnit) in CodeRunner
我有 Haskell 的 HUnit 的简单单元测试代码。我使用 Mac OS X 10.10,并使用 cabal install hunit
安装 HUnit。
module TestSafePrelude where
import SafePrelude( safeHead )
import Test.HUnit
testSafeHeadForEmptyList :: Test
testSafeHeadForEmptyList =
TestCase $ assertEqual "Should return Nothing for empty list"
Nothing (safeHead ([]::[Int]))
testSafeHeadForNonEmptyList :: Test
testSafeHeadForNonEmptyList =
TestCase $ assertEqual "Should return (Just head) for non empty list" (Just 1)
(safeHead ([1]::[Int]))
main :: IO Counts
main = runTestTT $ TestList [testSafeHeadForEmptyList, testSafeHeadForNonEmptyList]
我可以用runhaskell TestSafePrelude.hs
执行它得到结果:
Cases: 2 Tried: 2 Errors: 0 Failures: 0
Counts {cases = 2, tried = 2, errors = 0, failures = 0}
然而,当我在 Code Runner 中 运行 时,我得到了找不到 HUnit 模块的错误消息。
CodeRunner 在不同的 shell 环境中启动测试,这似乎是问题所在。如果可以,需要添加什么环境变量?如果不是,可能是什么导致了问题?
我还发现 CodeRunner 中的 ghc-pkg list
不搜索 ~/.ghc
中包含 HUnit 的目录。
/usr/local/Cellar/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d:
Cabal-1.18.1.4
array-0.5.0.0
...
xhtml-3000.2.1
这是在shell中执行的结果:
/usr/local/Cellar/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d
Cabal-1.18.1.4
array-0.5.0.0
...
/Users/smcho/.ghc/x86_64-darwin-7.8.3/package.conf.d
...
HUnit-1.2.5.2
...
zlib-0.5.4.2
我在路径中添加了 ~/.cabal
和 ~/.ghc
,但它不起作用。
问题是 $HOME
设置更改。我为 CodeRunner 使用了不同的 $HOME,但是 Haskell 搜索 $HOME/.cabal 和 $HOME/.ghc 来寻找已安装的包。
在我将 $HOME 重置为正确的位置后,一切正常。
我有 Haskell 的 HUnit 的简单单元测试代码。我使用 Mac OS X 10.10,并使用 cabal install hunit
安装 HUnit。
module TestSafePrelude where
import SafePrelude( safeHead )
import Test.HUnit
testSafeHeadForEmptyList :: Test
testSafeHeadForEmptyList =
TestCase $ assertEqual "Should return Nothing for empty list"
Nothing (safeHead ([]::[Int]))
testSafeHeadForNonEmptyList :: Test
testSafeHeadForNonEmptyList =
TestCase $ assertEqual "Should return (Just head) for non empty list" (Just 1)
(safeHead ([1]::[Int]))
main :: IO Counts
main = runTestTT $ TestList [testSafeHeadForEmptyList, testSafeHeadForNonEmptyList]
我可以用runhaskell TestSafePrelude.hs
执行它得到结果:
Cases: 2 Tried: 2 Errors: 0 Failures: 0
Counts {cases = 2, tried = 2, errors = 0, failures = 0}
然而,当我在 Code Runner 中 运行 时,我得到了找不到 HUnit 模块的错误消息。
CodeRunner 在不同的 shell 环境中启动测试,这似乎是问题所在。如果可以,需要添加什么环境变量?如果不是,可能是什么导致了问题?
我还发现 CodeRunner 中的 ghc-pkg list
不搜索 ~/.ghc
中包含 HUnit 的目录。
/usr/local/Cellar/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d:
Cabal-1.18.1.4
array-0.5.0.0
...
xhtml-3000.2.1
这是在shell中执行的结果:
/usr/local/Cellar/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d
Cabal-1.18.1.4
array-0.5.0.0
...
/Users/smcho/.ghc/x86_64-darwin-7.8.3/package.conf.d
...
HUnit-1.2.5.2
...
zlib-0.5.4.2
我在路径中添加了 ~/.cabal
和 ~/.ghc
,但它不起作用。
问题是 $HOME
设置更改。我为 CodeRunner 使用了不同的 $HOME,但是 Haskell 搜索 $HOME/.cabal 和 $HOME/.ghc 来寻找已安装的包。
在我将 $HOME 重置为正确的位置后,一切正常。