누구나 Monadic QuickCheck를 사용하여 IO 작업을 테스트하는 간단한 예를 제공 할 수 있습니까?Monadic QuickCheck로 IO 작업 테스트
답변
Test.QuickCheck.Monadic 모듈을 사용하면 모나 딕 코드 (IO
에서 실행되는 코드 포함)를 테스트 할 수 있습니다.
모나드 특성 시험
는m
이 테스트에서 실행
a
궁극적으로 무시됩니다 모나드이다 유형
PropertyM m a
,이다.
PropertyM IO a
의 경우
monadicIO
을 사용하여 모나드 테스트를
Property
으로 변환합니다. 다른 모든 모나드의 경우
monadic
대신에 (에는없는 모나드를 실행하는 함수가 필요합니다).
모나드 테스트에서 모나드에서 편집 된 값 return
은 무시됩니다. 표현식을 확인하려면 assert
을 사용하십시오. false 값을 지정하면 테스트가 실패합니다. 테스트중인 모나드에서 코드를 실행하려면 run
을 사용하십시오.
다른 모나 딕 액션이 있습니다. 예를 들어, pick
은 Gen a
에서 새 테스트 입력을 생성하고 pre
은 테스트 전제 조건을 검사합니다. 테스트 입력 또는 전제 조건 자체가 테스트중인 모나드를 통해 계산 된 값에 의존하는 경우 유용합니다.이 경우 입력을 생성하거나 선행 조건을 검사하는 정상적인 방법이 작동하지 않습니다.
다음은 일부 IO
코드를 테스트하는 예입니다. 임시 파일에 무언가를 작성한 후 동일한 데이터를 다시 읽을 수 있는지 확인합니다. 데모 목적을 위해 파일에 적어도 하나의 바이트를 쓰는 전제 조건을 부과 할 것입니다. 두 가지 테스트 속성은 동일한 작업을 수행합니다. 하나는 pick
및 pre
을 불필요하게 사용하지만 다른 하나는 사용하지 않습니다.
import System.Directory (removeFile)
import System.IO (hGetContents, hPutStr, hSeek, openBinaryTempFile, SeekMode (..))
import Test.QuickCheck (arbitrary, Property, quickCheck, (==>))
import Test.QuickCheck.Monadic (assert, monadicIO, pick, pre, run)
-- Demonstrating pick and pre as well:
prop_writeThenRead :: Property
prop_writeThenRead = monadicIO $ do writtenData <- pick arbitrary
pre $ not (null writtenData)
readData <- run $ writeThenRead writtenData
assert $ writtenData == readData
-- A more idiomatic way to write the above:
prop_writeThenRead2 :: [Char] -> Property
prop_writeThenRead2 writtenData = not (null writtenData) ==> monadicIO test
where test = do readData <- run $ writeThenRead writtenData
assert $ writtenData == readData
writeThenRead :: [Char] -> IO [Char]
writeThenRead output = do (path, h) <- openBinaryTempFile "/tmp" "quickcheck.tmp"
removeFile path
hPutStr h output
hSeek h AbsoluteSeek 0
hGetContents h
main :: IO()
main = do quickCheck prop_writeThenRead
quickCheck prop_writeThenRead2
모나 딕 코드를 테스트하는 표준 참조는 "Testing Monadic Code with QuickCheck"입니다. IO와 같은 모나드 환경에서 다양한 테스트 방법을 보여줍니다.
하지만 실제로 테스트하고 싶은 내용에 대해보다 구체적인 질문을 게시하는 것이 좋습니다.
링크가 끊어졌습니다. –
Koen은 분명히 그의 홈페이지를 재구성하고 있습니다. 대신 다음 URL을 사용해보십시오. [www.cse.chalmers.se/~rjmh/Papers/QuickCheckST.ps](http://www.cse.chalmers.se/~rjmh/Papers/QuickCheckST.ps) – svenningsson
- 1. 모나 딕 (monadic) 타입 디자인하기
- 2. quickcheck로 테스트 속성에 실패한 이유를 표시하는 방법은 무엇입니까?
- 3. 레이크 작업 테스트
- 4. StarTeam 작업 테스트
- 5. NHibernate CRUD 작업 테스트
- 6. Autosys 작업 테스트
- 7. 단위 작업 테스트
- 8. 오이로 반복 크론 작업 테스트
- 9. asp.net mvc 컨트롤러 작업 테스트
- 10. AppEngine의 단위 테스트 작업 대기열
- 11. WIN32 스레드 풀에서 예정된 작업/io/timer 항목 취소 중
- 12. C# 비동기 IO : 작업 순서를 보장하는 방법이 있습니까?
- 13. 자바 라인 IO 대 C++ IO?
- 14. GHC IO 관리자는 어떤 IO 작업을 지원합니까?
- 15. IO-APIC-fasteoi와 IO-APIC-edge의 차이점
- 16. EUnit 및 io : 형식
- 17. Windows의 모든 파일 IO 리디렉션
- 18. JUnit 테스트 이클립스에서 작업,하지만 난 개미
- 19. Visual Studio의 GC 작업 단위 테스트
- 20. 단위 테스트 사용자 지정 작업 필터
- 21. 작업 그룹 컴퓨터에서 Windows AD 통합 테스트
- 22. 통합 저장소에 대한 필터 작업 출력 테스트
- 23. android file io
- 24. IO - 설명서 - 질문
- 25. ffmpeg async io?
- 26. 펄에서 버퍼링되지 않은 IO
- 27. 네트워크 포트 IO
- 28. IO :: Lambda in Perl
- 29. 리눅스에서 IO 멀티플렉싱
- 30. Windows IO 오류
테스트하려는 것을 제공하면 더 나은 질문을하게됩니다. – Egon