Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте классы 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
- Assert.AreEqual
- Assert.AreNotEqual
- Assert.AreNotSame
- Assert.AreSame
- Assert.Contains
- Assert.ContainsSingle
- Assert.DoesNotContain
- Assert.DoesNotEndWith
- Assert.DoesNotMatchRegex
- Assert.DoesNotStartWith
- Assert.Fail
- Assert.HasCount
- Assert.Inconclusive
- Assert.IsEmpty
- Assert.IsFalse
- Assert.IsGreaterThan
- Assert.IsGreaterThanOrEqualTo
- Assert.IsInRange
- Assert.IsInstanceOfType
- Assert.IsLessThan
- Assert.IsLessThanOrEqualTo
- Assert.IsNegative
- Assert.IsNotEmpty
- Assert.IsNotInstanceOfType
- Assert.IsNotNull
- Assert.IsNull
- Assert.IsPositive
- Assert.IsTrue
- Assert.MatchesRegex
- Assert.StartsWith
- Assert.Throws
- Assert.ThrowsAsync
- Assert.ThrowsExactly
- Assert.ThrowsExactlyAsync
Класс StringAssert
Класс StringAssert используется для сравнения и проверки строк.
Замечание
Все StringAssert методы имеют эквиваленты в Assert классе. Предпочитайте методы Assert для лучшего обнаружения. Класс StringAssert поддерживается для обратной совместимости.
Доступные API:
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
Класс CollectionAssert
Класс CollectionAssert используется для сравнения коллекций объектов и проверки состояния коллекции.
Замечание
Если эквивалентный метод существует в классе (напримерAssert, ), Assert.Containsпредпочитайте использовать Assert.DoesNotContain для лучшего Assert обнаружения. Класс CollectionAssert поддерживается в основном для обратной совместимости.
Доступные API:
- CollectionAssert.AllItemsAreInstancesOfType
- CollectionAssert.AllItemsAreNotNull
- CollectionAssert.AllItemsAreUnique
- CollectionAssert.AreEqual
- CollectionAssert.AreEquivalent
- CollectionAssert.AreNotEqual
- CollectionAssert.AreNotEquivalent
- CollectionAssert.Contains
- CollectionAssert.DoesNotContain
- CollectionAssert.IsNotSubsetOf
- CollectionAssert.IsSubsetOf
Лучшие практики
Используйте конкретные утверждения: предпочитайте
AreEqualвместоIsTrue(a == b), так как это дает более информативные сообщения о сбоях.Включите описательные сообщения: помогайте быстро выявлять сбои с помощью четких сообщений утверждения.
Протестируйте одну вещь за раз: каждый метод теста должен проверить одно поведение.
Использовать
Throws/ThrowsExactlyдля исключений: в MSTest версии 3.8+, предпочитайтеAssert.ThrowsAssert.ThrowsExactlyи асинхронные аналоги (ThrowsAsync,ThrowsExactlyAsync) над атрибутомExpectedException.AssertStringAssert/Предпочтительнее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.ThrowsMSTEST0051 должен содержать одну инструкцию. -
MSTEST0053 . Избегайте
Assertпараметров формата. - MSTEST0058 . Избегайте утверждений в блоках catch.