2009-01-28 49 views
14

Mô tả cho Assert.Equals() từ Tài liệu MSDN: Không sử dụng phương pháp này.Tại sao Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Equals() tồn tại?

Vậy đó, giải thích đầy đủ. Uh .. ok, nhưng sau đó ... tại sao nó lại ở đó? Đây có phải là phương pháp không được chấp nhận từ phiên bản trước của khung công tác không? Cái gì đó được cho là chỉ được sử dụng bởi các Hội đồng Microsoft khác?

Nó chỉ làm cho tôi muốn sử dụng nó tất cả các chi tiết biết tôi không phải. ;-)

Có ai biết không?

Trả lời

21

.Nguồn được thừa kế từ đối tượng. Nó được liệt kê là "Không sử dụng phương pháp này" để người dùng sẽ không nhầm lẫn nó với phương pháp AreEqual.

+0

Lưu ý rằng '' CollectionAssert'' có cùng một lỗ hổng khi phơi bày''Object.Equals''. Không giống '' Assert'', '' CollectionAssert'' không định nghĩa lại phương thức, do đó bạn không nhận được thất bại kiểm tra hữu ích khi bạn chạy thử nghiệm mà bạn nhận được từ việc chạy thử nghiệm chứa '' Assert.Equals''. – vvnurmi

4

Tất cả các đối tượng trong .NET lấy từ số Object.

Đối tượng có phương thức .Equals(). Rõ ràng phương thức .Equals() cho đối tượng cụ thể này không làm bất cứ điều gì hữu ích, vì vậy các tài liệu cảnh báo bạn rằng nó không làm bất cứ điều gì hữu ích.

1

Nó đã được thay đổi trong năm 2008 (Có thể SP1) để không kiểm tra khi được gọi, để những người đã sử dụng nó một cách tình cờ đã nói với họ thực sự không nên sử dụng nó.

1

Assert.Equals, giống như phương pháp lớp học dựa trên của nó Object.Equals, là hoàn toàn hữu ích để so sánh các đối tượng. Tuy nhiên, không phương pháp nào hữu ích cho việc phát hiện và báo cáo độc lập hoặc lỗi trong thử nghiệm đơn vị, vì Object.Equals trả về một boolean thay vì ném nếu các giá trị không bằng nhau. Đây là một vấn đề nếu được sử dụng như thế này trong một thử nghiệm đơn vị:

Assert.Equals(42, ComputeMeaningOfLife()); 

Bên cạnh những vấn đề về kiểm tra đơn vị này có thể chạy :-) quá lâu, thử nghiệm này sẽ âm thầm thành công ngay cả khi phương pháp Tính cung cấp kết quả sai . Phương pháp phù hợp để sử dụng là Assert.AreEqual, không trả về bất kỳ thứ gì, nhưng ném ngoại lệ nếu các tham số không bằng nhau.

Assert.Equals đã được thêm vào để mã như trong ví dụ trên không rơi trở lại Object.Equals và âm thầm cho phép kiểm tra đơn vị. Thay vào đó, khi được gọi từ một bài kiểm tra đơn vị, Assert.Equals luôn ném một ngoại lệ nhắc bạn không sử dụng nó.

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