Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Используйте классы 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.