2013-08-20 37 views
5

Tôi gặp một số lượng đáng ngạc nhiên khó khăn trong việc kiểm tra đơn vị để chạy theo cabal. Tôi đã sao chép mã kiểm tra đúng nguyên văn từ the cabal documentation, với ngoại lệ của việc thay đổi tên mô-đunLàm thế nào để sử dụng chi tiết-0.9 trong thử nghiệm cabal

{-# LANGUAGE FlexibleInstances #-} 
module Test.Integral (tests) where 

import Distribution.TestSuite 

instance TestOptions (String, Bool) where 
    name = fst 
    options = const [] 
    defaultOptions _ = return (Options []) 
    check _ _ = [] 

instance PureTestable (String, Bool) where 
    run (name, result) _ | result == True = Pass 
         | result == False = Fail (name ++ " failed!") 

test :: (String, Bool) -> Test 
test = pure 

-- In actual usage, the instances 'TestOptions (String, Bool)' and 
-- 'PureTestable (String, Bool)', as well as the function 'test', would be 
-- provided by the test framework. 

tests :: [Test] 
tests = 
    [ test ("bar-1", True) 
    , test ("bar-2", False) 
    ] 

Tuy nhiên, khi tôi cố gắng xây dựng các bài kiểm tra, tôi nhận được thông báo sau:

Test/Integral.hs:6:10: 
    Not in scope: type constructor or class `TestOptions' 

Test/Integral.hs:12:10: 
    Not in scope: type constructor or class `PureTestable' 

tôi đã thử nhập chúng trực tiếp từ Distribution.TestSuite, nhưng nó nói rằng chúng không được xuất khẩu. Điều này đơn giản là tôi phải làm điều gì đó ngu ngốc, nhưng tôi không thể thấy nó là gì.

+0

'TestOptions' et al dường như đang đề cập đến một phiên bản cũ của OLD QuickCheck. Tôi đề nghị bạn sử dụng một khung kiểm tra hiện đại (nó xuất hiện những gì bạn đang xem chỉ là một khuôn khổ để chạy bộ thử nghiệm thông qua cabal, không xây dựng bộ thực tế - tìm hiểu ngon hoặc thử nghiệm khuôn khổ). –

Trả lời

5

Nhưng đối với những gì nó có giá trị, đây là một số mã mà làm việc:

module Main (tests) where 

import Distribution.TestSuite 

tests :: IO [Test] 
tests = do 
    return [ 
     test "foo" Pass 
    , test "bar" (Fail "It did not work out!") 
    ] 

test :: String -> Result -> Test 
test name r = Test t 
    where   
    t = TestInstance { 
     run = return (Finished r) 
     , name = name 
     , tags = [] 
     , options = [] 
     , setOption = \_ _ -> Right t 
     } 
3

Không có nhiều hỗ trợ cho detailed-0.9 ngoài kia. Có thể kết nối các thư viện thử nghiệm hiện có để sử dụng nó, nhưng ngay cả khi đó bạn sẽ không nhận được thông tin tiến bộ khi các bài kiểm tra vượt qua.

Tôi khuyên bạn nên sử dụng giao diện exitcode-stdio-1.0 cùng với khung kiểm tra hiện có + sử dụng GHCi trong quá trình phát triển.

Ví dụ đầy đủ cho Hspec có tại đây https://github.com/sol/hspec-example.