하스켈에서 단위 테스트를 작성하면 undefined
에 도달 할 때 표현식이 실패해야합니다. 약간 까다 롭습니다. 아무 소용이하스켈에서 lazy expression으로 평가되지 않은 undefined 평가 유닛
module Main where
import Test.Hspec
import Control.Exception (evaluate)
main :: IO()
main = hspec $ do
describe "Test" $ do
it "test case" $ do
evaluate (take 1 $ map (+1) [undefined, 2, 3]) `shouldThrow` anyException
: 나는 HSpec와 함께 다음 시도했다.
[*** Exception: Prelude.undefined
CallStack (from HasCallStack):
error, called at libraries\base\GHC\Err.hs:79:14 in base:GHC.Err
undefined, called at <interactive>:2:20 in interactive:Ghci1
이 답변은 좋지만 WHNF에 대한 인수를 평가한다고 명확하게 명시되어있을 때'evaluate'이 WHNF로 평가되지 않는다고 말할 때 혼란 스럽습니다. (https://hackage.haskell.org /package/base-4.9.0.0/docs/Control-Exception.html#v:evaluate). –
@AlexisKing 나는 정정! 어쨌든 WNHF만으로는 충분하지 않으므로 'NFData'가 필요한 이유는 무엇입니까? – Alec
사실, 정의되지 않은 단일 요소가있는 목록을 생성하기 때문에 테스트가 통과됩니까? (+1) 기능이 적용되지 않는 이유는 무엇입니까? –