0Pricing
C# Academy · Урок

Настройка 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
  • Одна проверка или одно поведение на тест
  • Тесты должны быть небольшими и независимыми

Проверки вызывают сбои

Быстрая проверка: что именно приводит к сбою модульного теста в MSTest или xUnit?

Итоги

Итоги: используйте шаблон 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 — локальная установка не требуется.

Все уроки этого курса

  1. Настройка xUnit/MSTest и утверждения
  2. Заглушки через интерфейсы и построители тестовых данных
  3. Отладка неудачных тестов
← Назад к C# Academy