2

我有 Haskell 的 HUnit 的简单单元测试代码。我使用 Mac OS X 10.10,并安装了带有cabal install 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 环境中启动测试,这似乎是问题所在。如果是这样,需要添加哪些环境变量?如果不是,可能是什么导致了问题?

在此处输入图像描述

我还发现ghc-pkg list从 CodeRunner 不会搜索~/.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,但它不起作用。

4

1 回答 1

0

问题是$HOME设置更改。我为 CodeRunner 使用了不同的 $HOME,但 Haskell 搜索 $HOME/.cabal 和 $HOME/.ghc 以查找已安装的包。

在我将 $HOME 重置为正确位置后,一切正常。

于 2015-04-29T20:23:05.290 回答