2017-04-06 42 views
6

Tôi muốn thiết lập dự án Haskell hiện có với Stack. Dự án hiện tại sử dụng nhiều tệp trong thư mục test; các tệp thử nghiệm riêng biệt theo mặc định, ngăn xếp (hoặc cabal?) xuất hiện để sử dụng một đơn test/Spec.hs để thử nghiệm. Làm thế nào tôi có thể tiếp tục sử dụng nhiều tệp với dự án này?Cách chạy nhiều tệp thử nghiệm với dự án ngăn xếp Haskell

LƯU Ý: Tôi đang học Haskell và dự án này tiếp cận việc học của tôi từ phương pháp "kata". Vì vậy, các bài kiểm tra được cô lập để tập trung vào một khía cạnh của ngôn ngữ tại một thời điểm.

+0

Bạn có thể định cấu hình hành vi thử nghiệm của chồng (và hành vi khác) trong tệp '.cabal'. Hãy tìm phần kiểm tra – Lazersmoke

+0

@Lazersmoke Tôi biết có một phần trong tệp '.cabal'. Bạn có ví dụ về cách thực hiện cấu hình này cho nhiều tệp thử nghiệm không? Tôi chưa tìm thấy một ví dụ rõ ràng, do đó đặt câu hỏi – haiqus

Trả lời

9

Dưới đây là một thiết lập cho một cấu trúc thư mục như thế này

> tree                      
. 
├── example.cabal 
├── app 
│   └── Main.hs 
├── ChangeLog.md 
├── LICENSE 
├── Setup.hs 
├── src 
│   ├── A 
│   │   └── C.hs 
│   ├── A.hs 
│   └── B.hs 
├── stack.yaml 
└── tst 
    ├── integration 
    │   └── Spec.hs 
    └── unit 
     ├── A 
     │   └── CSpec.hs 
     ├── ASpec.hs 
     ├── BSpec.hs 
     └── Spec.hs 

bạn muốn có thử nghiệm hội nhập đó là tách biệt với các bài kiểm tra đơn vị thông thường và một số phụ module tương ứng với mỗi mô-đun trong src -folder của bạn

trước hết bạn cần phải thêm các dãy phòng thử nghiệm để tập

example.cabal bạn

name:    example 
... 
-- copyright: 
-- category: 
build-type:   Simple 
extra-source-files: ChangeLog.md 
cabal-version:  >=1.10 

executable testmain 
    main-is:  Main.hs 
    hs-source-dirs: app 
    build-depends: base 
       , example 

library 
    exposed-modules:  A.C,A,B 
    -- other-modules: 
    -- other-extensions: 
    build-depends:  base >=4.9 && <4.10 
    hs-source-dirs:  src 
    default-language: Haskell2010 

test-suite unit-tests 
    type:   exitcode-stdio-1.0 
    main-is:  Spec.hs 
    hs-source-dirs: tst/unit 
    build-depends: base 
       , example 
       , hspec 
       , hspec-discover 
       , ... 

test-suite integration-tests 
    type:   exitcode-stdio-1.0 
    main-is:  Spec.hs 
    hs-source-dirs: tst/integration 
    build-depends: base 
       , example 
       , hspec 
       , ... 

đặt sau đây trong tst/unit/Spec.hs nó là từ hspec-discover và nó phát hiện ra (vì vậy tên) của bạn tất cả các module của form ...Spec.hs và thực hiện các chức năng spec từ mỗi của những mô-đun.

tst/unit/Spec.hs

{-# OPTIONS_GHC -F -pgmF hspec-discover #-} 

chỉ dòng này

file khác thử nghiệm

sau đó thêm các xét nghiệm đơn vị của bạn trong ASpec.hs của bạn, và những người khác trong BSpec.hs, CSpec.hsSpec.hs của bạn trong tst/integration thư mục

module ASpec where 

import Test.Hspec 
import A 

spec :: Spec 
spec = do 
    describe "Prelude.head" $ do 
    it "returns the first element of a list" $ do 
     head [23 ..] `shouldBe` (23 :: Int) 

    it "returns the first element of an *arbitrary* list" $ 
     property $ \x xs -> head (x:xs) == (x :: Int) 

    it "throws an exception if used with an empty list" $ do 
     evaluate (head []) `shouldThrow` anyException 

sau đó bạn có thể biên dịch và chạy thử nghiệm của bạn với

$> stack test 
# now all your tests are executed 
$> stack test :unit-tests 
# now only the unit tests run 
$> stack test :integration-tests 
# now only the integration tests run 

Nguồn

Bạn có thể tìm thấy tất cả các ví dụ tại https://hspec.github.io, nếu bạn muốn biết thêm về thử nghiệm hspec kiểu tôi đoán nó sẽ là tốt nhất để bắt đầu ở đó. Đối với ngăn xếp - hãy truy cập https://haskellstack.org - có một số thông tin về thử nghiệm/đo điểm chuẩn ở đó - Ý tôi là về chạy thử nghiệm và điểm chuẩn.

Đối với phong cách thử nghiệm khác nhau trong haskell, hãy xem HUnit, QuickCheck, Smallcheck, doctests (Nếu tôi quên một, xin lỗi bạn thân nhất - đó là những cái tôi thường xuyên sử dụng).

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