Tôi vừa bắt đầu sử dụng QuickCheck với một loạt mã Haskell. Tôi biết đằng sau thời gian, tôi biết. Câu hỏi này là hai phiên bản:Thực hành tốt nhất của Haskell QuickCheck (đặc biệt là khi thử nghiệm loại lớp học)
Thứ nhất, các phương pháp hay nhất chung để kiểm tra nhanh là gì? Cho đến nay, tôi đã nhặt như sau:
- Tên của bạn kiểm tra prop_ * (khó chịu, bởi vì mọi thứ khác là camelCase)
- Kiểm tra xuất khẩu mã (nếu bạn đang thử nghiệm internals bạn đang có khả năng làm việc đó sai)
- tính thử nghiệm, không ví dụ
- Đừng nói
X is out of range, Y is in range
- Thay vào đó, hãy nói
if x is out of range, normalize x ≠ x
(hoặc một số tài sản đó khác)
- Đừng nói
Nhưng tôi vẫn đang nắm bắt các phương pháp hay nhất khác. Cụ thể:
- Thuộc tính được lưu giữ ở đâu?
- Cùng một tệp?
- trong thư mục
test/
? (Nếu có, thì làm cách nào để bạn nhập nội dung trong sốsrc/
?) - trong thư mục
Properties/
dướisrc
?
Quan trọng nhất, chúng ta có xu hướng thử nghiệm các thuộc tính trên các loại lớp như thế nào? Ví dụ: hãy xem xét loại lớp sau (đơn giản):
class Gen a where
next :: a -> a
prev :: a -> a
Tôi muốn kiểm tra thuộc tính ∀ x: prev (next x) == x
. Tất nhiên, điều này liên quan đến việc viết các bài kiểm tra cho mỗi trường hợp. Thật tẻ nhạt khi viết cùng một thuộc tính cho mỗi cá thể, đặc biệt khi thử nghiệm phức tạp hơn. Cách tiêu chuẩn để khái quát hóa các xét nghiệm như thế nào?
Đối với hàng nhập khẩu khi sử dụng song song 'src/'và thử nghiệm /' thư mục ', bạn sẽ muốn đặt' Hs-Source-dirs: src, test' trong file' .cabal' của bạn để cả hai thư mục nằm trong đường dẫn tìm kiếm mô-đun. – hammar
Tại sao nội bộ không thể có thuộc tính? – alternative
Họ chắc chắn có thể, đó chỉ là khó khăn hơn để có được các xét nghiệm để họ và (theo kinh nghiệm của tôi) nó hữu ích hơn nhiều để kiểm tra hành vi xuất khẩu thay vì chi tiết thực hiện. – So8res