Tôi đang cố gắng thực hành TDD, bằng cách sử dụng nó để phát triển một đơn giản như Bit Vector. Tôi tình cờ sử dụng Swift, nhưng đây là một câu hỏi không biết ngôn ngữ.
My BitVector
là một struct
cửa hàng lưu trữ một đĩa đơn UInt64
và đưa ra một API cho phép bạn coi nó như một bộ sưu tập. Các chi tiết không quan trọng lắm, nhưng nó khá đơn giản. 57 bit cao là các bit lưu trữ và 6 bit thấp hơn là các bit "đếm", cho bạn biết có bao nhiêu bit lưu trữ thực sự lưu trữ một giá trị được chứa.
Cho đến nay, tôi có một số khả năng rất đơn giản:
- Bộ khởi tạo xây dựng các vectơ bit trống
- Một
count
loại tài sảnInt
- Một
isEmpty
loại tài sảnBool
- Một toán tử đẳng thức (
==
). NB: đây là toán tử đẳng thức giá trị gần giống vớiObject.equals()
Java, không phải là toán tử đẳng thức tham chiếu như==
trong Java.
Tôi đang chạy vào một loạt các phụ thuộc theo chu kỳ:
Bài kiểm tra đơn vị kiểm tra trình khởi tạo của tôi cần xác minh rằng phần mới được xây dựng
BitVector
. Nó có thể làm như vậy theo một trong 3 cách:- Kiểm tra
bv.count == 0
- Kiểm tra
bv.isEmpty == true
- Kiểm tra xem
bv == knownEmptyBitVector
Phương pháp 1 dựa vào
count
, phương pháp 2 dựa vàoisEmpty
(chính nó dựa vàocount
, vì vậy không có điểm nào sử dụng nó), phương pháp 3 dựa vào==
. Trong mọi trường hợp, tôi không thể kiểm tra trình khởi tạo của mình một cách cô lập.- Kiểm tra
Thử nghiệm cho
count
nhu cầu hoạt động trên một cái gì đó, chắc chắn sẽ kiểm tra (các) trình khởi tạo của tôiViệc thực hiện
isEmpty
dựa vàocount
Việc thực hiện
==
dựa vàocount
.
Tôi đã có thể giải quyết một phần vấn đề này bằng cách giới thiệu API riêng xây dựng BitVector
từ một mẫu bit hiện có (dưới dạng UInt64
). Điều này cho phép tôi khởi tạo các giá trị mà không cần kiểm tra bất kỳ trình khởi tạo nào khác, để tôi có thể "khởi động dây đeo" theo cách của mình.
Để các bài kiểm tra đơn vị của tôi thực sự là bài kiểm tra đơn vị, tôi thấy mình đang thực hiện một loạt các vụ hack, điều này làm phức tạp đáng kể sản phẩm và mã kiểm tra của tôi.
Làm thế nào chính xác để bạn có được xung quanh các loại vấn đề?
BitVector
là một kích thước đơn vị hoàn toàn tốt để thử nghiệm đơn vị và giải quyết ngay lập tức các vấn đề của bạn mà các thành viên công cộngBitVector
cần nhau để thực hiện các thử nghiệm có ý nghĩa.