Trong các thử nghiệm đơn vị của tôi, tôi thường ném các giá trị tùy ý vào mã của mình để xem nó làm gì. Ví dụ: nếu tôi biết rằng foo(1, 2, 3)
phải trả lại 17, tôi có thể viết điều này:
assertEqual(foo(1, 2, 3), 17)
Những con số này hoàn toàn tùy ý và không có ý nghĩa rộng hơn (ví dụ, chúng không phải là điều kiện biên, mặc dù tôi cũng thử nghiệm trên những điều đó). Tôi sẽ đấu tranh để đưa ra những cái tên hay cho những con số này, và viết một cái gì đó giống như const int TWO = 2;
rõ ràng là không có ích. Viết các bài kiểm tra như thế này có ổn không, hay tôi nên tính các số đó thành các hằng số?
Trong Có phải tất cả các số ma thuật được tạo ra giống nhau? , chúng tôi đã học được rằng các con số ma thuật là ổn nếu ý nghĩa rõ ràng từ ngữ cảnh, nhưng trong trường hợp này, các con số thực sự không có ý nghĩa gì cả.
const int TWO = 2;
thậm chí còn tồi tệ hơn là chỉ sử dụng 2
. Nó phù hợp với từ ngữ của quy tắc với ý định vi phạm tinh thần của nó.
foo
, nó không có nghĩa gì cả, và các tham số cũng vậy. Nhưng trong thực tế, tôi khá chắc chắn chức năng không có tên đó, và các thông số không có tên bar1
, bar2
và bar3
. Làm một ví dụ thực tế hơn trong đó các tên có ý nghĩa, sau đó sẽ có ý nghĩa hơn để thảo luận nếu các giá trị dữ liệu thử nghiệm cũng cần một tên.
1, 2, 3
là các chỉ số mảng 3D nơi bạn đã lưu trữ giá trị trước đó17
, thì tôi nghĩ thử nghiệm này sẽ rất tệ (miễn là bạn cũng có một số thử nghiệm âm tính). Nhưng nếu đó là kết quả của một phép tính, bạn nên đảm bảo rằng bất kỳ ai đọc bài kiểm tra này sẽ hiểu tại saofoo(1, 2, 3)
nên17
và số ma thuật có thể sẽ không đạt được mục tiêu đó.