NUnit: Какой самый краткий способ установить, содержит ли IEnumerable объект определенного типа? - PullRequest
8 голосов
/ 01 марта 2010

У меня есть метод с именем RenderContent , который возвращает object[]
В моем модульном тесте мне нужно утверждать, что этот массив не содержит объектов типа VerifyRequest

В данный момент я использую следующий оператор Assert. Есть что-нибудь более краткое?

Assert.That(
    domain.RenderContent().OfType<VerifyRequest>().Count(),
    Is.EqualTo(0)
);

Я предпочитаю использовать свободный синтаксис. Также обратите внимание, что RenderContent возвращает object[], а не IQueryable<object>.

Ответы [ 5 ]

14 голосов
/ 01 марта 2010

Если вы используете NUnit 2.5, вы можете использовать что-то вроде:

Assert.That(domain.RenderContent(), Has.None.InstanceOf<VerifyRequest>());

Но я не уверен, что другие платформы модульного тестирования поддерживают этот стиль assert.

12 голосов
/ 01 марта 2010

Хотя я не знаю точного синтаксиса NUnit для утверждения IsFalse, лучше всего подходит для этого вида теста метод расширения Any:

Assert.IsFalse(domain.RenderContent().OfType<VerifyRequest>().Any());  

Может быть заманчиво использовать метод Count, но Any более эффективен, так как он сломается при первом появлении.

2 голосов
/ 01 марта 2010

Метод расширения Any, которому можно задать лямбда-выражение:

Assert.IsFalse(domain.RenderContent().Any(i => i is VerifyRequest));
1 голос
/ 01 марта 2010

Я предпочитаю подход Assert.AreEqual; NUNit использует Assert.That для внутренних объектов Assert, STringAssert и т. Д. Мне нравится просто делать Assert.AreEqual (0, domain.RenderContent (). OfType (). Count ()); проверить на счет.

Таким образом, он напрямую проверяет, что ни у одного объекта типа нет какого-либо количества записей, но в какой-то момент вы видите предпочтения, и все они одинаково действительны. Вы должны выбрать то, что вам нравится для вашего стиля разработки.

1 голос
/ 01 марта 2010

Вы можете сократить его, используя вместо этого метод Assert.AreEqual:

Assert.AreEqual(domain.RenderContent().OfType<VerifyRequest>().Count(), 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...