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.hs
và Spec.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).
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
@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