2017-01-14 2 views
0

어떻게 같은 기능을 Control.Monad.Except (두 가드 결과)를 테스트 할 수 있습니다?

+0

그것은 내가 지금까지 본 것을이 아닌 IO 모나드와 hunit 사용하는 것은 불가능에서처럼 보인다. –

+0

hunit의 대안? – Randomize

+0

잘 모르겠습니다. Except를 사용하는 이유가 있습니까? 대신 여기에'어쩌면'을 사용할 것입니다. –

답변

2

runExcept을 사용하여 Except 동작을 실행하고 결과를 확인하기 위해 ~?=을 사용하는 일부 기능을 작성하는 것은 간단합니다.

shouldThrow :: Eq e => Except e a -> e -> Test 
m `shouldThrow` e = runExcept m ~?= Left e 

shouldReturn :: Eq a => Except e a -> a -> Test 
m `shouldReturn` x = runExcept m ~?= Right x 

사용 예제는 :

testFoo = TestList [ 
    foo -11 2 `shouldThrow` "Invalid parameter", 
    foo 3 1 `shouldReturn` 4 
    ] 
+0

입니다. 이미'runExcept'를 사용하려고했지만 오류가 발생했습니다. – Randomize