В чем разница между этими двумя утверждениями модульного теста? - PullRequest
7 голосов
/ 15 октября 2010

Наткнулся на следующий MS Unit Test:

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

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

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

Я никогда не видел использования обобщений при выполнении утверждений.

Вот как бы я написал Утверждение:

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

В чем разница?

Когда я нахожусь над перегрузкой AreNotEqual(), которую я использую, метод использует перегрузку, которая сравнивает две двойные (не уверен, почему нет перегрузки int, int).

И если я делаю вставим универсальный параметр типа <int> в, ReSharper говорит, что это избыточно.

Итак, мой вопрос: если способ, которым я это делаю, все еще безопасен от типа, зачем использовать общие утверждения?

1 Ответ

5 голосов
/ 15 октября 2010

Итак, мой вопрос - если способ, которым я это делаю, все еще безопасен от типа, зачем использовать общие утверждения?

Вы используете общее утверждение сейчас,Компилятор видит универсальный метод и выбирает его во время компиляции.Вот почему Решарпер говорит, что <int> является избыточным - это не потому, что метод избыточен, а скорее потому, что компилятор может неявно определить, что метод Assert.AreNotEqual<int> является правильным методом для использования.

ВВообще, вам часто не нужно указывать тип на дженериках.Это то, что делает синтаксис LINQ переносимым - без него вам бы пришлось указывать типы при каждом вызове метода в цепочке, а анонимные типы были бы непригодны для использования.

При этом бывают случаи, когда указываетсяуниверсальный тип не требуется.Это главным образом в том случае, если компилятор не может определить тип автоматически, например, если в списке аргументов нет соответствующего параметра (например: Foo.Create<MyClass>()), или если тип не может быть определен по какой-либо другой причине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...