У меня есть метод под названием RenderContent, который возвращается object[]
В моем модульном тесте я должен утверждать, что этот массив не содержит объектов типа VerifyRequest
В данный момент я использую следующее Assert
оператор. Действительно ли там что-нибудь более кратко?
Assert.That(
domain.RenderContent().OfType<VerifyRequest>().Count(),
Is.EqualTo(0)
);
Я предпочитаю использовать быстрый синтаксис. Отметьте также тот RenderContent возвраты object[]
, нет IQueryable<object>
.
Если вы используете NUnit 2.5, вы можете использовать что-то вроде:
Assert.That(domain.RenderContent(), Has.None.InstanceOf<VerifyRequest>());
Но я не уверен, поддерживают ли другие среды модульного тестирования этот стиль утверждения.
Метод расширения Any, которому можно задать лямбда-выражение:
Assert.IsFalse(domain.RenderContent().Any(i => i is VerifyRequest));
Вы можете немного сократить его, используя вместо этого метод Assert.AreEqual:
Assert.AreEqual(domain.RenderContent().OfType<VerifyRequest>().Count(), 0);
Я предпочитаю подход Assert.AreEqual; NUNit использует Assert.That для внутренних объектов Assert, STringAssert и т. Д. Мне нравится просто выполнять Assert.AreEqual (0, domain.RenderContent (). OfType (). Count ()); чтобы проверить подсчеты.
Таким образом, он напрямую проверяет, что ни один объект типа не имеет какого-либо количества записей, но до некоторой степени варианты, которые вы видите, являются предпочтительными, и все они одинаково допустимы. Вы должны выбрать то, что вам нравится в вашем стиле разработки.
Хотя я не знаю точного синтаксиса NUnit для утверждения IsFalse, лучше всего для такого типа теста подходит метод расширения Any
:
Assert.IsFalse(domain.RenderContent().OfType<VerifyRequest>().Any());
Может возникнуть соблазн использовать метод Count
, но Any
более эффективен, так как он прервется при первом появлении.