Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В этой статье вы узнаете об API и соглашениях, используемых MSTest для написания и формирования тестов.
Примечание.
Имена атрибутов, заканчивающиеся атрибутом "Атрибут", могут использовать короткую форму.
TestClass и TestClassAttribute эквивалентны. Атрибуты с конструкторами без параметров могут опустить скобки.
Структура тестирования
Каждый класс теста MSTest должен иметь TestClass атрибут, и каждый метод теста должен иметь TestMethod атрибут:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CalculatorTests
{
[TestMethod]
public void Add_TwoNumbers_ReturnsSum()
{
// Arrange
var calculator = new Calculator();
// Act
int result = calculator.Add(2, 3);
// Assert
Assert.AreEqual(5, result);
}
}
TestClassAttribute
Помечает TestClassAttribute класс, содержащий тесты и, при необходимости, методы для инициализации или очистки. Этот атрибут можно расширить для настройки поведения тестового класса.
TestMethodAttribute
Метод TestMethodAttribute помечается как тест для запуска. Методы тестирования должны быть:
- Методы экземпляра (не статические)
- Публика
- Return
void,TaskилиValueTask(MSTest версии 3.3+) - Без параметров, если не используются атрибуты, управляемые данными
[TestClass]
public class TestMethodExamples
{
[TestMethod]
public void SynchronousTest()
{
Assert.IsTrue(true);
}
[TestMethod]
public async Task AsynchronousTest()
{
await Task.Delay(100);
Assert.IsTrue(true);
}
}
Предупреждение
Не используйте async void для методов тестирования. Вместо этого используются типы async Task или async ValueTask.
DiscoverInternalsAttribute
Атрибут DiscoverInternalsAttribute сборки позволяет MSTest обнаруживать internal тестовые классы и методы. По умолчанию обнаруживаются только public тесты. Этот атрибут особенно полезен при наличии параметризованных тестов, использующих внутренние типы в качестве параметров:
[assembly: DiscoverInternals]
internal record TestInput(int Value, string Description);
[TestClass]
public class CalculatorTests
{
internal static IEnumerable<TestInput> TestData
{
get
{
yield return new TestInput(1, "one");
yield return new TestInput(2, "two");
}
}
[TestMethod]
[DynamicData(nameof(TestData))]
internal void Add_WithTestInput_ReturnsExpected(TestInput input)
{
var calculator = new Calculator();
int result = calculator.Add(input.Value, 1);
Assert.AreEqual(input.Value + 1, result);
}
}
Без DiscoverInternalsэтого метод теста и его внутренний TestInput тип параметров не будут обнаружены средством выполнения теста.
Основные понятия
Документация MSTest организована по разделу:
| Тема | Description |
|---|---|
| Утверждения | Проверка ожидаемых результатов с помощью классов Assert |
| Тестирование на основе данных | Выполнение тестов с несколькими входными данными (DataRow, DynamicData) |
| Жизненный цикл тестирования | Настройка и очистка на уровнях сборки, класса и тестирования |
| Элемент управления выполнением | Потоки, параллелизация, время ожидания, повторные попытки и условное выполнение |
| Тестовая организация | Категории, приоритеты, владельцы и метаданные |
| TestContext | Доступ к сведениям о среде выполнения теста |
Краткий справочник по атрибутам
| Категория | Атрибуты | Смотри |
|---|---|---|
| Идентификация теста |
TestClass
TestMethod
DiscoverInternals
|
Эта страница |
| Управляемые данными |
DataRow
DynamicData
TestDataRow
|
Тестирование на основе данных |
| Lifecycle |
AssemblyInitialize, , ClassInitializeTestInitializeи аналогы очистки |
Жизненный цикл тестирования |
| Нарезание резьбы |
STATestClass
STATestMethod
UITestMethod
|
Элемент управления выполнением |
| Распараллеливание |
Parallelize, DoNotParallelize |
Элемент управления выполнением |
| Время ожидания и повторная попытка |
Timeout, Retry |
Элемент управления выполнением |
| Conditional |
Ignore
OSCondition
CICondition
|
Элемент управления выполнением |
| Метаданные |
TestCategory
TestProperty
Owner
Priority
|
Тестовая организация |
| Отслеживание трудозатрат |
WorkItem, GitHubWorkItem |
Тестовая организация |
Проверочные утверждения
Классы Assert пространства имен Microsoft.VisualStudio.TestTools.UnitTesting служат для проверки определенных функциональных возможностей. Метод тестирования выполняет код вашего приложения, но сообщает о корректности только в том случае, если включены инструкции Assert.
Утверждения MSTest делятся на:
-
Assertкласс: утверждения общего назначения (AreEqual, ,IsTrueThrowsException) -
StringAssertкласс: утверждения, относящиеся к строке (Contains,Matches,StartsWith) -
CollectionAssertкласс: утверждения коллекции (Contains,AllItemsAreUnique,AreEquivalent)
Тестирование частных членов
Вы можете протестировать частные члены с помощью классов оболочки отражения:
- PrivateObject: для методов частного экземпляра
- PrivateType: для частных статических методов
Подсказка
Рассмотрим, требуются ли частные методы прямого тестирования. Часто тестирование через общедоступные интерфейсы обеспечивает лучшее покрытие и более обслуживаемые тесты.