[testing] Haskell 테스트 워크 플로

방금 새 Haskell 프로젝트를 시작했고 처음부터 좋은 테스트 워크 플로를 설정하고 싶었습니다. Haskell은 훌륭하고 독특한 테스트 도구가 많고이를 통합하는 다양한 방법이있는 것 같습니다.

나는 조사했다 :

모두 자신의 영역에서 잘 작동하는 것처럼 보이지만 테스트에 대한 포괄적 인 접근 방식을 찾고 있으며 다른 사람들에게 무엇이 잘 작동하는지 궁금합니다.



답변

단위 테스트, 코드 범위 및 벤치 마크를 올바르게 얻는 것은 대부분 올바른 도구를 선택하는 것입니다.

  • test-framework는 하나의 하네스에서 모든 HUnit 테스트 케이스 및 QuickCheck 속성을 모두 실행할 수있는 원 스톱 상점을 제공합니다 .
  • 코드 커버리지는 HPC 의 형태로 GHC에 내장됩니다. 도구 있습니다.
  • Criterion은 꽤 훌륭한 벤치마킹 기계를 제공합니다.

단위 테스트, 코드 적용 범위 및 벤치 마크로 활성화하기 시작한 패키지를 실행 예제로 사용하겠습니다.

http://github.com/ekmett/speculation

테스트 및 벤치 마크를 섹션을 추가하고 플래그 뒤에 마스킹하여 라이브러리의 모든 사용자가 액세스 할 수 있도록 (그리고 스스로 사용하고 싶어하지 않도록) cabal 파일에 직접 통합 할 수 있습니다. ) 선택한 테스트 도구의 정확한 버전.

http://github.com/ekmett/speculation/blob/master/speculation.cabal

그런 다음 cabal에게 테스트 스위트를 실행하는 방법을 알릴 수 있습니다. cabal 테스트가 아직 존재하지 않기 때문에 올해 여름 코드를 위해 작업하는 학생이 있습니다! -우리가 가진 최고의 메커니즘은 여기 cabal의 사용자 후크 메커니즘을 사용하는 방법입니다. 이것은 cabal을 사용하여 ‘Custom’빌드로 전환하고 testHook을 설정하는 것을 의미합니다. test-framework로 작성된 테스트 프로그램을 실행 한 다음 hpc를 프로필에 적용하는 testHook의 예는 여기에서 찾을 수 있습니다.

http://github.com/ekmett/speculation/blob/master/Setup.lhs

그런 다음 테스트 프레임 워크를 사용하여 QuickCheck 및 HUnit 테스트를 하나의 프로그램으로 묶을 수 있습니다.

http://github.com/ekmett/speculation/blob/master/Test.hs

cabal 파일은 코드 검사 테스트를 활성화하기 위해 -fhpc를 설정하도록주의를 기울인 다음 Setup.lhs의 testHook은 hpc를 수동으로 실행하고 출력을 dist dir에 기록합니다.

벤치마킹의 경우 이야기는 좀 더 수동적이며 ‘캐벌 벤치 마크’옵션이 없습니다. 벤치 마크를 테스트 후크에 연결할 수 있지만 Criterion에는 그래픽보고 옵션이 너무 많기 때문에 직접 실행하는 것이 좋습니다. 위와 같이 벤치 마크를 cabal 파일에 추가하고, 별도의 컴파일 플래그를 부여하고, cabal 플래그 뒤에 숨긴 다음 Criterion을 사용하여 모든 무거운 작업을 수행 할 수 있습니다.

http://github.com/ekmett/speculation/blob/master/Benchmark.hs

그런 다음 명령 줄에서 벤치 마크를 실행하고 벤치 마크 결과 등이 포함 된 팝업 KDE 창을 가져올 수 있습니다.

실제로 Haskell 코드를 개발하는 동안 어쨌든 cabal에 살고 있기 때문에 도구 체인을 그것과 통합하는 것이 좋습니다.

편집 : 이제 기갑 단 테스트 지원이 존재합니다. 참조 http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites를


답변

이 접근 방식은 RWH ch 11 에서 옹호 되며 XMonad 에서는 대략 다음과 같습니다.

QuickCheck를 통해 주요 불변이 설정되면 리팩토링을 시작하여 해당 테스트를 유형 불변으로 이동할 수 있습니다.

귀하의 노력을 지원하는 관행 :

  • 모든 커밋에서 단순화 된 QuickCheck 회귀를 실행합니다.
  • HPC 커버리지 세부 정보를 게시합니다.

답변

테스트 프레임 워크 패키지 정말 굉장합니다. HUnit 및 QuickCheck 테스트를 쉽게 통합하고 명령 줄 플래그를 기반으로 지정된 제품군 만 실행하는 실행 파일을 여러 출력 대상과 함께 가져올 수 있습니다.

테스트와 프로파일 링은 다른 짐승입니다. 프로파일 링을 위해 프로파일 링하려는 섹션 만 강조하는 별도의 실행 파일을 설정하고 빌드 및 실행 프로파일 링 결과를주의 깊게 살펴 봅니다 (컴파일의 경우 -prof-auto-all, 런타임의 경우 + RTS -p 사용) 깃발).


답변

테스트를 위해 HUnit 및 QuickCheck 속성에 의존하고 Haskell 테스트 프레임 워크를 사용합니다. 를 사용하여 모든 단위 테스트와 모든 QuickCheck 속성을 자동으로 수집합니다.

면책 조항 : 저는 Haskell Test Framework의 주요 개발자입니다.


답변