2013-02-23 29 views
8

Tôi đã cố gắng sử dụng cài đặt cabal như một cách để xây dựng và quan trọng hơn là thử nghiệm các dự án haskell của tôi, giống như cách Maven được sử dụng trong các dự án Java, cũng là một cách hay để tích hợp trong Jenkins hoặc ci hay như vậy, và nó có vẻ rất đáng tin cậy theo nghĩa là bạn không cần môi trường phát triển và do đó được thiết lập để kiểm tra và xác nhận xem mã có biên dịch hay chính xác hay không hay không.Tích hợp QuickCheck Haskell Cabal

Dù sao, tôi đang sử dụng QuickCheck và HUnit cho việc này. Trong một bài viết khác here trên trao đổi stack tôi tìm thấy một cách tốt đẹp để tích hợp HUnit và cabal, bằng cách sử dụng các thử nghiệm chức năng trong Distribution.TestSuite.HUnit để tạo ra một mảng kiểm tra tiếp xúc trong mô-đun thử nghiệm của tôi. Công trinh.

tôi đã cố gắng để làm cùng một kiểu thiết lập với QuickCheck,

import qualified Distribution.TestSuite.QuickCheck2 as CabalQuickCheck 

    alwaysFalseOneArg::Int->(Int,Int) 
    alwaysFalseOneArg x = (x,x) 

    quickCheckPropOneArg = \s->let (a,b)=alwaysFalseOneArg s in a==b && a/=b 

    cabalQCTest = CabalQuickCheck.test "test" quickCheckPropOneArg 

    tests=cabalQCTest:[] 

Tôi muốn nhìn thấy thử nghiệm này thất bại.

Tệp cabal Tôi đã làm việc với thiết lập HUnit, với các kiểm tra HUnit đang chạy và không thành công hoặc không bị lỗi như chúng cần. Nếu tôi sử dụng cùng một thiết lập để thực hiện kiểm tra quickcheck tuy nhiên, cabal nói với tôi rằng nó thực sự tìm thấy một bộ thử nghiệm, nhưng không có thử nghiệm trong đó. Tôi đã thử các phương pháp được đề cập trên site của Distribution.TestSuite.QuickCheck2 là tốt, nhưng có họ dường như không đề cập đến làm thế nào để lộ các thử nghiệm và tôi dường như không quản lý để làm cho chạy. Bây giờ tôi đã mất một chút, tôi có thể chạy các kiểm tra quickcheck đó bằng quickcheck nhưng không phải với cabal và tôi muốn có thể kiểm tra nhanh tất cả các test và code của mình và sử dụng nó trong Jenkins. Có ai là một ý tưởng không?

Tôi cố gắng cung cấp tất cả thông tin mà tôi nghĩ là cần thiết mà không cần quá phức tạp vì vậy tôi không đăng tệp cabal hoàn chỉnh và cứ thế, nếu điều đó là cần thiết, tôi tất nhiên sẽ làm như vậy. Tôi tìm thấy khá một vài bài viết tương tự, nhưng hầu hết trong số họ đun sôi xuống để sử dụng cái gì khác hơn so với chi tiết-0.9 mà sẽ là một điều đáng tiếc vì nó có vẻ làm việc khá độc đáo với HUnit như một thiết lập và tôi muốn sử dụng cả HUnit và QuickCheck trong cùng một cách tất nhiên, tốt nhất phơi bày một mảng kiểm tra có chứa HUnit và kiểm tra QuickCheck như nhau.

Kasper

+0

Dưới đây là ví dụ: https://github.com/patperry/hs-monte-carlo/blob/master/monte-carlo.cabal và thử nghiệm với cuộc gọi chính QC: https: // github .com/patperry/hs-monte-carlo/blob/master/tests/Main.hs – gliptak

+1

Theo dõi nhận xét của gliptak - tôi sẽ điều tra bằng cách sử dụng khung kiểm thử; Tôi thấy nó thuận tiện hơn. Một [bổ sung] (https://github.com/isturdy/q/blob/master/tests/Tests.hs) [ví dụ] (https://github.com/isturdy/q/blob/master/tests/Data /Queue/RealtimeTests.hs). – isturdy

Trả lời

2

Tôi đồng ý với isturdy: Tôi chắc chắn sẽ có một đi vào test-framework + test-framework-quickcheck2. Hãy xem this example về cách sử dụng chúng cùng nhau trong một dự án. Lưu ý các thuộc tính được gọi là prop_*.

Bạn cũng có thể xem dự án haskell-minecraft-tool để xem kết quả thử nghiệm trông như thế nào. Chạy thử nghiệm với

cabal configure --enable-tests && cabal build && cabal test 

xem tệp .cabal ở đây để xem gói nào là bắt buộc. Cụ thể đây là test-framework, test-framework-quickcheck2, QuickCheck.

Các vấn đề liên quan