Бөлісу құралы:


Утверждения MSTest

Используйте классы Assert пространства имен Microsoft.VisualStudio.TestTools.UnitTesting для проверки конкретной функциональности. Метод тестирования выполняет код в приложении, но сообщает о правильности только при включении Assert инструкций.

Обзор

MSTest предоставляет три класса утверждения:

Class Цель
Assert Утверждения общего назначения для значений, типов и исключений.
StringAssert Утверждения, относящиеся к строке, для шаблонов, подстроок и сравнений.
CollectionAssert Утверждения коллекций для сравнения и валидации коллекций.

Подсказка

Если функционал существует в Assert и StringAssert/CollectionAssert, предпочтительнее использовать класс Assert. Класс Assert обеспечивает лучшую возможность обнаружения и рекомендуется для использования в новом коде. StringAssert и CollectionAssert поддерживаются для обратной совместимости.

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

Assert.AreEqual(expected, actual, "Values should match after processing");

Класс Assert

Используйте класс Assert, чтобы убедиться, что код в тесте работает должным образом.

Распространенные методы утверждения

[TestMethod]
public async Task AssertExamples()
{
    // Equality
    Assert.AreEqual(5, calculator.Add(2, 3));
    Assert.AreNotEqual(0, result);

    // Reference equality
    Assert.AreSame(expected, actual);
    Assert.AreNotSame(obj1, obj2);

    // Boolean conditions
    Assert.IsTrue(result > 0);
    Assert.IsFalse(string.IsNullOrEmpty(name));

    // Null checks
    Assert.IsNull(optionalValue);
    Assert.IsNotNull(requiredValue);

    // Type checks
    Assert.IsInstanceOfType<IDisposable>(obj);
    Assert.IsNotInstanceOfType<string>(obj);

    // Exception testing (MSTest v3.8+)
    Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
    await Assert.ThrowsExactlyAsync<InvalidOperationException>(
        async () => await service.ProcessAsync());
}

Доступные интерфейсы API

Класс StringAssert

Класс StringAssert используется для сравнения и проверки строк.

Замечание

Все StringAssert методы имеют эквиваленты в Assert классе. Предпочитайте методы Assert для лучшего обнаружения. Класс StringAssert поддерживается для обратной совместимости.

Доступные API:

Класс CollectionAssert

Класс CollectionAssert используется для сравнения коллекций объектов и проверки состояния коллекции.

Замечание

Если эквивалентный метод существует в классе (напримерAssert, ), Assert.Containsпредпочитайте использовать Assert.DoesNotContain для лучшего Assert обнаружения. Класс CollectionAssert поддерживается в основном для обратной совместимости.

Доступные API:

Лучшие практики

  1. Используйте конкретные утверждения: предпочитайте AreEqual вместо IsTrue(a == b), так как это дает более информативные сообщения о сбоях.

  2. Включите описательные сообщения: помогайте быстро выявлять сбои с помощью четких сообщений утверждения.

  3. Протестируйте одну вещь за раз: каждый метод теста должен проверить одно поведение.

  4. Использовать Throws/ThrowsExactly для исключений: в MSTest версии 3.8+, предпочитайте Assert.ThrowsAssert.ThrowsExactlyи асинхронные аналоги (ThrowsAsync,ThrowsExactlyAsync) над атрибутомExpectedException.

  5. Assert StringAssert /ПредпочтительнееCollectionAssert: если функциональные возможности существуют в обоих классах, используйте Assert класс для повышения удобства обнаружения и согласованности.

Следующие анализаторы помогают обеспечить надлежащее использование утверждений:

  • MSTEST0006 . Избегайте ExpectedException атрибута, используйте Assert.Throws вместо этого методы.
  • MSTEST0017 — аргументы утверждения должны передаваться в правильном порядке.
  • MSTEST0023 — не отрицайте булевы утверждения.
  • MSTEST0025 — предпочитать Assert.Fail вместо всегда ложных условий.
  • MSTEST0026 . Аргументы утверждения должны избегать условного доступа.
  • MSTEST0032 - Проверьте всегда истинные условия утверждения.
  • MSTEST0037 . Используйте правильные методы утверждения.
  • MSTEST0038 - Избегайте Assert.AreSame типов значений.
  • MSTEST0039 — используйте более Assert.Throws новые методы.
  • MSTEST0040 . Избегайте использования утверждений в контексте async void.
  • MSTEST0046 — используйте Assert вместо StringAssert.
  • - Assert.Throws MSTEST0051 должен содержать одну инструкцию.
  • MSTEST0053 . Избегайте Assert параметров формата.
  • MSTEST0058 . Избегайте утверждений в блоках catch.

См. также