Правда ли, что NUnit требует "волшебные строки", а MSTest - нет? - PullRequest
4 голосов
/ 17 июня 2011

Я пытаюсь выбрать основу для модульного тестирования.Я только что прочитал это сравнение между NUnit и MSTest , и в примере в разделе "Наш третий тест - NUnit" магические строки используются для ссылки на имя свойства, а версия MSTest - нет.

Вот версия MSTest:

Assert.IsNotNull(b.Players.Where(x => x.Name.Equals("Cross")));
Assert.IsNotNull(b.Players.Where(x => x.Name.Equals("Nought")));

Вот версия NUnit:

Assert.That(b.Players, Has.Some.With.Property("Name").EqualTo("Nought"));
Assert.That(b.Players, Has.Some.With.Property("Name").EqualTo("Cross"));

Автор (bearbonescoder) утверждает, что версия NUnit лучше, потому что ее свободный стильявляется более читабельным, в то время как некоторые комментаторы не согласны, потому что NUnit требует "магические строки" для имен свойств.Автор, похоже, не рассматривал эту критику, но мне кажется, что это довольно серьезный недостаток для NUnit, когда речь заходит о рефакторинге.

(Кстати, я люблю LINQ, поэтому не нахожуУтверждения MSTest даже отдаленно трудно подделать.Кроме того, я считаю, что запросы LINQ, использованные автором в его примере, неверны - выражение Where, которое приводит к отсутствию записей, будет возвращать пустое IEnumerable<T> not null.)

В любом случае, мои вопросы:

  1. Верно ли, что NUnit требует "волшебные строки", как в приведенном выше примере, или есть другое и разумноэффективный способ написать те же утверждения без волшебных строк?(Примечание: я имею в виду только «Имя», а не «Ничто» и «Крест».)

  2. Должен ли я заботиться?

1 Ответ

6 голосов
/ 17 июня 2011

В конце концов, единственное, что должно иметь значение, если сделанное вами утверждение верно или нет. Есть несколько способов проверить вещи, как в NUnit, так и в MSTest. Вам не нужно использовать свободный синтаксис, вы можете написать такое же утверждение, как это, например:

Assert.True(b.Players.Any(p => p.Name == "Cross");

Лично я предпочитаю свободный синтаксис для простых (r) проверок, таких как

Assert.That(b.Name, Is.EqualTo("Stan"));

или

Assert.That(b.Players, Is.Not.Null);

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

(Как примечание, я предпочитаю NUnit из-за свободного синтаксиса, но также таких вещей, как Assert.Throws и его противоположности Assert.DoesNotThrow, а также удобных классов утверждений, таких как CollectionAssert и StringAssert, ни один из которые присутствуют в MSTest.

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