2010-10-15 32 views
7

Came trên MS Unit Test sau:Sự khác biệt giữa hai xác nhận thử nghiệm đơn vị này là gì?

[TestMethod] 
public void PersonRepository_AddressCountForSinglePerson_IsNotEqualToZero() 
{ 
    // Arrange. 
    Person person; 

    // Act. 
    person = personRepository.FindSingle(1); 

    // Assert. 
    Assert.AreNotEqual<int>(person.Addresses.Count, 0); 
} 

Tôi chưa bao giờ thấy việc sử dụng Generics khi làm Khẳng định.

Đây là cách tôi sẽ viết Assertion:

// Assert. 
Assert.AreNotEqual(person.Addresses.Count, 0); 

sự khác biệt là gì?

Khi tôi di chuột qua quá tải AreNotEqual() tôi đang sử dụng, phương pháp đang sử dụng quá tải so sánh hai đôi (không chắc chắn tại sao không có int, quá tải int).

Và nếu tôi làm đặt thông số loại chung của <int> vào, ReSharper cho biết là không cần thiết.

Vì vậy, câu hỏi của tôi là: nếu cách tôi làm điều đó vẫn an toàn loại, tại sao lại sử dụng xác nhận chung?

Trả lời

5

Vì vậy, câu hỏi của tôi là - nếu cách tôi thực hiện nó vẫn an toàn loại, tại sao lại sử dụng xác nhận chung?

Bạn hiện đang sử dụng xác nhận chung. Trình biên dịch thấy phương thức chung và chọn nó ở thời gian biên dịch. Đây là lý do tại sao Resharper nói rằng <int> là thừa - không phải vì phương thức thừa, mà là trình biên dịch có thể ngầm xác định rằng phương thức Assert.AreNotEqual<int> là phương pháp thích hợp để sử dụng.

Nói chung, bạn thường không cần phải chỉ định loại trên generics. Đây là những gì làm cho cú pháp LINQ bearable - mà không có nó, bạn cần phải xác định các loại trên mỗi cuộc gọi phương thức trong chuỗi, và các loại vô danh sẽ không sử dụng được.

Điều đó đang được nói, có những lúc chỉ định loại chung là bắt buộc. Điều này chủ yếu nếu trình biên dịch không thể xác định loại tự động, chẳng hạn như nếu không có tham số khớp trong danh sách đối số (ví dụ: Foo.Create<MyClass>()) hoặc nếu loại không thể xác định được vì một lý do nào khác.

+1

Điều đó giải thích nó thực sự tốt, cảm ơn. Vì vậy, thông thường, chúng tôi không cần sử dụng thông số loại chung cho hầu hết các xác nhận loại giá trị. Tôi đoán bây giờ nếu trình biên dịch than phiền về một xác nhận mơ hồ, tôi sẽ biết sử dụng tham số kiểu. Cảm ơn. – RPM1984

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