나는 현재 다음 테스트 코드가 있습니다IO가 아닌 모나드에서 HUnit을 테스트 프레임 워크와 함께 사용할 수 있습니까?
testUpdate :: Test
testUpdate = testCase "update does change artist" $ do
(created, Just revised, parents) <- mbTest $ do
Just editor <- fmap entityRef <$> findEditorByName "acid2"
created <- create editor startWith
let artistId = coreMbid created
newRev <- update editor (coreRevision created) expected
editId <- openEdit
includeRevision editId newRev
apply editId
found <- findLatest artistId
parents <- revisionParents newRev
return (created, found, parents)
coreData revised @?= expected
assertBool "The old revision is a direct parent of the new revision" $
parents == [coreRevision created]
where
startWith = ...
expected = ...
이 좀 작동을하지만 지저분한입니다. 나는 오히려 테스트중인 다양한 것들을 반환하지 않고 무언가를 쓸 수있게되었고, 대신 그들이 이해할 수있는 주장을했다.
나는 Assertable
클래스가 있음을 알았지 만, 나는 아마 많은 것들을 재발 명해야 할 것 같다.
큰 질문입니다. 처음 사용했을 때 그 유형에 IO가 필요한 이유가 궁금합니다. –
모나드가 'liftIO'를 지원합니까? – hammar
@hammar 그렇습니다. 그리고 내가해야 할 일은 'liftIO'로 테스트를 수행하는 것만 큼은 알 수 없습니다. 그러나, 질문을 열어두고 다른 방법이있을 수 있습니다. – ocharles