Mã trùng lặp là một mùi trong mã thử nghiệm đơn vị cũng giống như trong mã khác. Nếu bạn có mã trùng lặp trong các thử nghiệm, thì việc cấu trúc lại mã triển khai sẽ khó hơn vì bạn có số lượng thử nghiệm không tương xứng để cập nhật. Các bài kiểm tra sẽ giúp bạn tự tin cấu trúc lại, thay vì trở thành một gánh nặng lớn cản trở công việc của bạn trên mã đang được kiểm tra.
Nếu việc sao chép được trong vật cố thiết lập, hãy xem xét việc sử dụng nhiều setUp
phương pháp hoặc cung cấp thêm (hoặc nhiều linh hoạt) Phương pháp sáng tạo .
Nếu sự trùng lặp nằm trong mã thao tác với SUT, thì hãy tự hỏi tại sao nhiều thử nghiệm được gọi là "đơn vị" đang thực hiện cùng một chức năng.
Nếu có sự trùng lặp trong các xác nhận, thì có lẽ bạn cần một số Xác nhận tùy chỉnh . Ví dụ: nếu nhiều thử nghiệm có chuỗi xác nhận như:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
Sau đó, có lẽ bạn cần một assertPersonEqual
phương pháp duy nhất để bạn có thể viết assertPersonEqual(Person('Joe', 'Bloggs', 23), person)
. (Hoặc có lẽ bạn chỉ cần nạp chồng toán tử bình đẳng vào Person
.)
Như bạn đã đề cập, điều quan trọng là mã kiểm tra phải có thể đọc được. Đặc biệt, điều quan trọng là mục đích của một bài kiểm tra phải rõ ràng. Tôi thấy rằng nếu nhiều bài kiểm tra hầu như giống nhau, (ví dụ: 3/4 số dòng giống nhau hoặc gần như giống nhau) thì khó có thể phát hiện và nhận ra sự khác biệt đáng kể nếu không đọc kỹ và so sánh chúng. Vì vậy, tôi thấy rằng việc tái cấu trúc để loại bỏ sự trùng lặp sẽ giúp dễ đọc hơn, bởi vì mọi dòng của mọi phương pháp thử nghiệm đều liên quan trực tiếp đến mục đích của thử nghiệm. Điều đó hữu ích hơn nhiều cho người đọc hơn là sự kết hợp ngẫu nhiên giữa các dòng có liên quan trực tiếp và các dòng chỉ là bản ghi sẵn.
Điều đó nói rằng, đôi khi các bài kiểm tra đang thực hiện các tình huống phức tạp giống nhau nhưng vẫn khác biệt đáng kể và thật khó để tìm ra cách tốt để giảm sự trùng lặp. Sử dụng cách hiểu thông thường: nếu bạn cảm thấy các bài kiểm tra có thể đọc được và làm rõ ý định của chúng và bạn cảm thấy thoải mái với việc có thể cần cập nhật nhiều hơn số lượng bài kiểm tra tối thiểu về mặt lý thuyết khi cấu trúc lại mã được gọi bởi các bài kiểm tra, thì hãy chấp nhận sự không hoàn hảo và di chuyển vào thứ gì đó hiệu quả hơn. Bạn luôn có thể quay lại và cấu trúc lại các bài kiểm tra sau, khi cảm hứng xuất hiện!