ich zur Zeit den folgenden Testcode:Ist es möglich, HUnit mit Test-Framework in einer anderen Monade als IO zu verwenden?
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 = ...
Dieses irgendwie funktioniert, aber es ist chaotisch. Viel lieber wäre ich in der Lage, etwas zu schreiben, ohne die verschiedenen zu testenden Dinge zurückgeben zu müssen und stattdessen die Behauptungen zu haben, wo sie Sinn machen.
Ich sehe dort ist die Assertable
Klasse, aber es scheint, als würde ich am Ende neu erfinden eine Menge Zeug.
Große Frage, ich erinnere mich daran zu fragen, warum alles IO in seiner Art benötigt, wenn ich es zuerst verwendete. –
Unterstützt das Monad 'liftIO'? – hammar
@hammar Es tut, und ich bin mir nicht sicher, wie ich die Tatsache verpasst habe, dass alles, was ich tun muss, ist, diese Tests mit 'liftIO' zu hissen. Allerdings lasse ich die Frage offen, vielleicht gibt es andere Möglichkeiten :) – ocharles