하스켈을 배우고 좋은 개발자가되어 단위 테스트를 작성합니다. 다양한 정렬 알고리즘과 해당 테스트를 구현했습니다. 그러나 입력 및 출력이 다양하지 않으므로 입력을 정렬하는 데 사용되는 알고리즘 만 있기 때문에 별도의 테스트가 중복되는 것으로 느낍니다. 여러 다른 단위 테스트 프레임 워크에서 가능한 데이터 기반 테스트 또는 데이터 테이블을 만드는 방법이 있습니까?Hspec을 사용하여 데이터 기반 테스트를 작성하는 방법은 무엇입니까?
module RecursionSpec (main, spec) where
import Test.Hspec
import Recursion
main :: IO()
main = hspec spec
spec :: Spec
spec = do
let input = [3, 1, 5, 2, 4]
output = [1, 2, 3, 4, 5]
describe "bubblesort" $ do
it ("sorts " ++ show input) $ do
bubblesort input `shouldBe` output
describe "mergesort" $ do
it ("sorts " ++ show input) $ do
mergesort input `shouldBe` output
describe "quicksort" $ do
it ("sorts " ++ show input) $ do
quicksort input `shouldBe` output
또한 다음과 같은 경고 메시지가 나타납니다.
warning: [-Wtype-defaults]
• Defaulting the following constraints to type ‘Integer’
(Show a0)
arising from a use of ‘show’ at test/RecursionSpec.hs:14:21-30
(Eq a0)
arising from a use of ‘shouldBe’ at test/RecursionSpec.hs:15:7-40
(Ord a0)
arising from a use of ‘bubblesort’ at test/RecursionSpec.hs:15:7-22
(Num a0)
arising from the literal ‘1’ at test/RecursionSpec.hs:12:17
(Num a0)
arising from the literal ‘3’ at test/RecursionSpec.hs:11:16
• In the second argument of ‘(++)’, namely ‘show input’
In the first argument of ‘it’, namely ‘("sorts " ++ show input)’
In the expression: it ("sorts " ++ show input)
Upvoted을하지만, 단위 테스트 프레임 워크가 상자 밖으로 제공해야 무엇을 구현하기 위해 더 많은 코드를 작성 내가 찾고 있는게 아니야. 유형을 지정하면 경고가 제거되지만 처음에 왜 나타나는지 이해하고 싶습니다. 'input'은'[Integer]'라는 것이 명백합니다 - 그렇지 않으면 똑똑한 컴파일러는 어떤 문제가 있습니까? –
'빠른 검사'를 통해 더 나은 데이터 중심의 자료를 제공하고, 임의의 테스트 입력을 생성 할 수 있습니다. 그것은 내가 개인적으로 사용하는 것입니다. 오류의 경우 값에 'Integer' 또는'Int' 유형이있을 수 있습니다. – hnefatl
감사합니다. quickcheck을 살펴 보겠습니다. 속성 중심 테스트, 다른 접근 방법 인 것 같습니다. 그리고'[Int]'는'input'과'output'에 대해서도 작동합니다 - 나는 [Int vs Integer] (https://stackoverflow.com/questions/3429291/haskell-int-and-integer)를 잊어 버렸습니다. –