2012-03-11 22 views

cevap

10

Peki ya IO yerine, mükemmel kontrol edilen ve şart koşulan bir ortamla G/Ç'yi simüle eden bir monad kullandınız? Saf işlevler gibi "IO" eylemlerini kolayca test edebilirsiniz. ,

myFunction :: a -> b -> IOSpec (Teletype :+: IORefS) 
myFunction x y = do 
    ... 
    putStr (...) 
    ref <- newIORef ... 
    ... 

(teletip terminali işlevleri için izin: Bu yazabilirim, fikri hassas size simüle IO'da izin vermek istediğiniz etkinin ne tür belirtmek için izin vererek daha da uzağa gider mesela IOSpec için arkasında Referanslar için IORefS) Ve daha sonra fonksiyonunuzu bir quickcheck özelliğinde test edin (örneğin, VM modülü ve runIOSpec'e bakın), giriş ve çıkış üzerinde tam kontrol ile veya GHCI'de adım adım ilerleyin. Ve düzgün çalışıyorsa, IOSpec f IO için eşanlamlı olarak yeniden tanımlayan Test.IOSpec.Surrogate tanıtmak için ithalat değiştirin.

İlgili konular