Настройка xUnit/MSTest и утверждения
Изучите структуру теста (Arrange-Act-Assert), посмотрите, как утверждения приводят к сбою тестов, и сопоставьте эти идеи с атрибутами MSTest/xUnit.
«Настройка xUnit/MSTest и утверждения» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 3 уроков всего.
Что такое модульный тест
Цель: писать небольшие повторяемые модульные тесты.
- Отдельный проект тестов использует MSTest или xUnit
- Каждый тест проверяет одно поведение
- Используйте понятные имена и проверки
Шаблон AAA
Тесты следуют шаблону Подготовка → Действие → Проверка. Здесь мы имитируем проверку с помощью простого условия.
using System;
public static class MathUtil
{
// Method under test
public static int Add(int a, int b)
{
return a + b;
}
}
public class Program
{
public static void Main(string[] args)
{
// Arrange
int a = 2;
int b = 3;
int expected = 5;
// Act
int actual = MathUtil.Add(a, b);
// Assert (manual check for this console demo)
if (actual == expected)
Console.WriteLine("PASS: Add returned " + actual);
else
Console.WriteLine("FAIL: expected " + expected + " but got " + actual);
}
}
Поведение проверки
Проверка выбрасывает исключение при несовпадении. Настоящие платформы работают похожим образом, но предоставляют более богатый API и улучшенные отчёты.
using System;
public static class Assert
{
public static void AreEqual(int expected, int actual)
{
if (expected != actual)
throw new Exception("AreEqual failed: expected " + expected + ", actual " + actual);
}
public static void IsTrue(bool condition, string message)
{
if (!condition) throw new Exception("IsTrue failed: " + message);
}
}
public static class MathUtil
{
public static int Mul(int a, int b) { return a * b; }
}
public class Program
{
public static void Main(string[] args)
{
try
{
int r = MathUtil.Mul(2, 4);
Assert.AreEqual(8, r); // pass
Assert.IsTrue(r % 2 == 0, "even"); // pass
Console.WriteLine("All assertions passed.");
}
catch (Exception ex)
{
Console.WriteLine("TEST FAILED: " + ex.Message);
}
}
}
Пример успешно проходящих тестов
Каждый тест проверяет одно поведение. В настоящих MSTest/xUnit неуспешная Assert помечает тест как не пройденный.
using System;
public static class StringUtil
{
public static string Repeat(string s, int n)
{
if (n < 0) throw new ArgumentOutOfRangeException("n");
string r = "";
for (int i = 0; i < n; i++) r += s;
return r;
}
}
public static class Assert
{
public static void AreEqual(string expected, string actual)
{
if (expected != actual)
throw new Exception("AreEqual failed: expected [" + expected + "], actual [" + actual + "]");
}
}
public class Program
{
static void TestRepeat_Happy()
{
string got = StringUtil.Repeat("ab", 3);
Assert.AreEqual("ababab", got); // pass
}
static void TestRepeat_EmptyTimesZero()
{
string got = StringUtil.Repeat("x", 0);
Assert.AreEqual("", got); // pass
}
public static void Main(string[] args)
{
try { TestRepeat_Happy(); Console.WriteLine("PASS: Happy"); } catch (Exception ex) { Console.WriteLine("FAIL: Happy -> " + ex.Message); }
try { TestRepeat_EmptyTimesZero(); Console.WriteLine("PASS: Zero"); } catch (Exception ex) { Console.WriteLine("FAIL: Zero -> " + ex.Message); }
}
}
Соответствие MSTest и xUnit
Основы MSTest:
- [TestClass] у класса
- [TestMethod] у каждого теста
- Assert.AreEqual/IsTrue/AreNotEqual…
Основы xUnit:
- [Fact] для метода теста
- Assert.Equal/True/False…
- Атрибут класса тестов не требуется
Советы по именованию и области действия
Советы:
- Называйте тесты по шаблону Method_Scenario_ExpectedResult
- Одна проверка или одно поведение на тест
- Тесты должны быть небольшими и независимыми
Проверки вызывают сбои
Итоги
Итоги: используйте шаблон AAA, сравнивайте ожидаемое и фактическое значения с помощью проверок и применяйте MSTest ([TestMethod]) или xUnit ([Fact]).
Часто задаваемые вопросы
Урок «Настройка xUnit/MSTest и утверждения» бесплатный?
Да — полный текст урока «Настройка xUnit/MSTest и утверждения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 3 уроков всего.
Чему я научусь в уроке «Настройка xUnit/MSTest и утверждения»?
Изучите структуру теста (Arrange-Act-Assert), посмотрите, как утверждения приводят к сбою тестов, и сопоставьте эти идеи с атрибутами MSTest/xUnit. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Настройка xUnit/MSTest и утверждения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка xUnit/MSTest и утверждения
- Заглушки через интерфейсы и построители тестовых данных
- Отладка неудачных тестов