Về thử nghiệm đơn vị, tôi được dạy rằng mã sản xuất không nên có mã liên quan đến thử nghiệm trong đó.Các giao diện thực hiện đơn lẻ có dành cho đơn vị thử nghiệm một antipattern không?
Vâng, tôi cảm thấy như tôi đang phá vỡ quy tắc đó mỗi lần tôi thử kiểm tra đơn vị.
Tôi có một lớp học trong nội bộ của mình, Xyzzy
. Tôi muốn phụ thuộc tiêm nó vào một lớp khác và sau đó stub nó để tôi có thể kiểm tra rằng các lớp khác trong sự cô lập, vì vậy tôi làm cho một giao diện, IXyzzy
. Rất tiếc, bây giờ tôi có mã sản xuất thực sự chỉ ở đó để thử nghiệm. Thậm chí tệ hơn, tôi đã đi ngược lại giao diện là gì (mô tả những gì một người thực hiện có thể làm, không phải là những gì nó là). Giao diện công cộng của Xyzzy và IXyzzy hoàn toàn giống nhau và không ai khác (ngoại trừ các nhánh) thực hiện IXyzzy.
Điều đó có vẻ như là một điều xấu đối với tôi.
Tôi có thể tạo lớp cơ sở trừu tượng hoặc tạo tất cả các phương pháp công khai mà tôi muốn thử nghiệm trên Xyzzy Overridable
/virtual
, nhưng điều đó cũng không đúng vì Xyzzy không được thiết kế để thừa kế và từ quan điểm YAGNI được thừa kế từ.
Việc tạo giao diện người triển khai duy nhất chỉ nhằm mục đích thử nghiệm chống mẫu? Có lựa chọn thay thế tốt hơn?
Rất đúng, rất nhiều giao diện của tôi, ví dụ: 'IRequestor', mô tả những gì nó làm;) –