Konfiguracja xUnit/MSTest i asercje
Proszę poznać strukturę testu (Arrange-Act-Assert), sprawdzić, jak asercje powodują niepowodzenie testów, oraz powiązać te idee z atrybutami MSTest/xUnit.
Konfiguracja xUnit/MSTest i asercje to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.
Czym jest test jednostkowy?
Cel: Pisać małe, powtarzalne testy jednostkowe.
- Oddzielny projekt testów korzysta z MSTest lub xUnit
- Każdy test sprawdza jedno zachowanie
- Używaj jasnych nazw i asercji
Wzorzec AAA
Testy stosują schemat Arrange → Act → Assert. Tutaj symulujemy asercję za pomocą prostego sprawdzenia.
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);
}
}
Działanie asercji
Asercja zgłasza wyjątek w przypadku niezgodności. Rzeczywiste frameworki działają podobnie (mają bogatsze API i lepsze raporty).
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);
}
}
}
Przykład zakończonych powodzeniem testów
Każdy test sprawdza jedno zachowanie. W rzeczywistych testach MSTest/xUnit nieudana Assert oznacza test na czerwono.
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); }
}
}
Odpowiedniki w MSTest i xUnit
Podstawy MSTest:
- [TestClass] przy klasie
- [TestMethod] przy każdym teście
- Assert.AreEqual/IsTrue/AreNotEqual…
Podstawy xUnit:
- [Fact] przy metodzie testowej
- Assert.Equal/True/False…
- Atrybut klasy testowej nie jest potrzebny
Wskazówki dotyczące nazw i zakresu
Wskazówki:
- Nazywaj testy według schematu Method_Scenario_ExpectedResult
- Jedna asercja lub jedno zachowanie na test
- Testy powinny być małe i niezależne
Asercje powodują niepowodzenie testów
Podsumowanie
Podsumowanie: Stosuj wzorzec AAA, porównuj oczekiwane i rzeczywiste wartości za pomocą asercji oraz korzystaj z MSTest ([TestMethod]) lub xUnit ([Fact]).
Często zadawane pytania
Czy lekcja „Konfiguracja xUnit/MSTest i asercje” jest bezpłatna?
Tak — pełny tekst „Konfiguracja xUnit/MSTest i asercje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Konfiguracja xUnit/MSTest i asercje”?
Proszę poznać strukturę testu (Arrange-Act-Assert), sprawdzić, jak asercje powodują niepowodzenie testów, oraz powiązać te idee z atrybutami MSTest/xUnit. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.
Ile czasu zajmuje lekcja „Konfiguracja xUnit/MSTest i asercje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Konfiguracja xUnit/MSTest i asercje
- Fakes za pośrednictwem interfejsów i kreatory danych testowych
- Debugowanie nieudanych testów