2016-12-10 25 views
5

Cách điển hình để tích hợp cấu trúc và kiểm thử đơn vị trong Clojure là gì? Cho đến nay tôi có một thư mục test/ theo cấu trúc của thư mục src/ của tôi. Nhưng tôi muốn chia chúng thành các bài kiểm tra đơn vị và các bài kiểm tra tích hợp.Clojure - tổ chức kiểm tra tích hợp

Có chiến lược được đề xuất không? Chú thích trong các bài kiểm tra? các thư mục con test/unittest/integration? Biến môi trường?

Lưu ý: Tôi sử dụng boot thay vì leiningen trong trường hợp nó quan trọng

Trả lời

6

Tổ chức là tùy thuộc vào bạn. Bạn có thể tạo một cây thư mục riêng biệt cho các bài kiểm tra tích hợp, có các tệp riêng biệt trong cùng một cây thư mục hoặc có các bài kiểm tra đơn vị và kiểm tra tích hợp trong cùng một tệp nguồn thử nghiệm.

Sự khác biệt thực duy nhất giữa đơn vị & thử nghiệm hội nhập là

  1. họ mất bao lâu để chạy
  2. tắm thiết lập với phần khác của hệ thống của bạn (điều này cũng có nghĩa họ đang chậm và/hoặc khó khăn hơn để chạy).

Vì vậy, một trong hai cách kiểm tra tích hợp phải được gắn nhãn với ^:integration siêu dữ liệu trên mỗi hàm. Kỹ thuật này cũng hữu ích với các bài kiểm tra đơn vị "chậm".

A "chậm" thử nghiệm có thể được đánh dấu như thế này (trong đó sử dụng clojure.test.check thử nghiệm sinh sản):

(tst/defspec ^:slow round-trip-bytes 9999 
    (prop/for-all [orig gen/bytes] 
    (let [string-b64 (b64/encode-bytes->str orig) 
      result  (b64/decode-str->bytes string-b64) ] 
     (assert (every? b64/base64-chars (seq string-b64))) 
     (assert (types/byte-array? result)) 
     (= (seq orig) (seq result))))) 

Sau đó, trong bạn project.clj (không khởi động, tôi biết), ghi rõ:

:test-selectors { :default (complement :slow) 
        :slow  :slow } 

Sau đó, khi bạn nói lein run các bài kiểm tra được đánh dấu bằng ^:slow sẽ bị bỏ qua và khi bạn nói lein run :all tất cả các bài kiểm tra (bao gồm cả các bài kiểm tra "chậm") sẽ được chạy.

Lưu ý rằng không có gì đặc biệt về từ khóa :slow. Bạn có thể thay thế bất kỳ từ khóa nào bạn muốn, chẳng hạn như :integration.

Tôi chưa sử dụng boot nhiều nhưng tôi cho rằng có sẵn một kỹ thuật tương tự.

+0

Theo như tôi biết đây không phải là một cái gì đó tồn tại tại thời điểm khởi động, nhưng tôi thích ý tưởng. – nha

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