2009-07-24 18 views
13

Giả sử chúng ta đang thử nghiệm kết quả của một phương thức bằng cách khẳng định sự bình đẳng của tất cả các thuộc tính của đối tượng kết quả với các thuộc tính của đối tượng kết quả mong đợi. Chúng ta có nên thực hiện phương thức equals và sử dụng Assert.AreEqual (expectedResult, actualResult) ... Nhưng equals có thể có nghĩa là một cái gì đó khác trong mã sản xuất.Có nên ghi đè bằng phương pháp để khẳng định sự bình đẳng đối tượng trong thử nghiệm đơn vị không?

Phương pháp hay nhất là gì?

  • Khẳng định sự bình đẳng giữa các đối tượng thông qua overriden bằng phương pháp

hoặc

  • Khẳng định sự bình đẳng của tất cả các thuộc tính

Trả lời

18

Tôi cho một khẳng định sử dụng tùy chỉnh. Có hai lý do chính:

  • không ép buộc các vấn đề kiểm tra vào sản xuất. Điều này có nghĩa là ý nghĩa của equals trong phương pháp thử nghiệm có thể không trùng với ý nghĩa đối với mã sản xuất;
  • bằng có thể không đủ tốt cho tất cả các thử nghiệm. Các thử nghiệm khác nhau sẽ yêu cầu các xác nhận khác nhau, do đó, bạn có thể sẽ vẫn sử dụng xác nhận tùy chỉnh.
+0

Tôi nghĩ rằng bạn là đúng, nhưng phải làm gì, nếu các thuộc tính của đối tượng được thử nghiệm không thể truy cập từ bên trong thử nghiệm. Sử dụng phản chiếu? –

3

Tôi không nghĩ câu hỏi này có liên quan đến cách làm tiêu chuẩn. Đó là một vấn đề của suy nghĩ về những gì thử nghiệm của bạn có nghĩa vụ phải được thử nghiệm.

Nếu bạn muốn kiểm tra xem tất cả các thuộc tính có bằng nhau hay không, hãy khẳng định tính bình đẳng của tất cả các thuộc tính.

Nếu bạn muốn kiểm tra giá trị trả về của phương thức Equals của toàn bộ đối tượng, hãy xác nhận thay vào đó.

+0

+1 hoàn toàn đơn giản nhưng hoàn toàn chính xác! –

4

Nếu bạn đang thử nghiệm giá trị trả lại của một phương thức hoặc hàm trả về một đối tượng giá trị (ví dụ: giá trị tiền tệ hoặc một bộ hoặc bản đồ), thì có nghĩa là kiểm tra đối tượng kết quả bằng đối tượng kết quả mong đợi. Trong trường hợp này, việc thực hiện chuẩn của bằng sẽ làm những gì bạn muốn.

Trong khi đó, nếu bạn đang gọi một trình tắt trên một số đối tượng và sau đó kiểm tra xem nó có làm thay đổi đối tượng như mong đợi hay không, tôi nghĩ sẽ kiểm tra chỉ những thuộc tính của đối tượng cần được thay đổi. Điều này ngăn cản bạn phải thực hiện một định nghĩa tùy chỉnh bằng, mà dù sao cũng sẽ che khuất những gì bạn mong đợi đã xảy ra trong thử nghiệm.

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