Şu anda aşağıdaki test kodu vardır:HUnit'i IO'dan başka bir monadde test çerçevesiyle kullanmak mümkün mü?
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 = ...
Bu tür çalışır, ancak dağınık. Test altındaki çeşitli şeyleri geri göndermeye gerek kalmadan bir şeyler yazmayı ve bunun yerine anlamlı olduklarını iddia ettim.
Assertable
sınıfının olduğunu görüyorum, ama sanırım muhtemelen bir sürü şeyi yeniden icat etmek zorundayım.
Harika bir soru, ilk kullandığımda neden her şeyin IO'ya ihtiyaç duyduğunu merak ettiğimi hatırlıyorum. –
Monad 'liftIO'yu destekliyor mu? – hammar
@hammar Yaptığım her şeyin, "liftIO" ile yapılan testlerin kaldırılması olduğu gerçeğini kaçırdığımdan emin değilim. Bununla birlikte, soruyu açık bırakacağım, belki başka yollar da olabilir :) – ocharles