CsharpTest jednostkowy sprawdza jedną klasę w izolacji. Test integracyjny sprawdza, czy cały pipeline — routing, middleware, dependency injection, serializacja JSON — faktycznie działa razem, wysyłając prawdziwe…
Czytaj więcej →
CsharpOtwierasz klasę z logiką biznesową i nagle dostajesz w twarz „drabiną” instrukcji if-else, która ciągnie się przez trzy ekrany? To nie tylko męczące, ale i niebezpieczne…
Czytaj więcej →
CsharpAssert.Equal(oczekiwany, wynik) działa, ale gdy test padnie, komunikat błędu bywa lakoniczny. FluentAssertions to biblioteka, która zamienia asercje w czytelne zdania (wynik.Should().Be(oczekiwany)) i — ważniejsze — generuje…
Czytaj więcej →
CsharpValue types vs reference types w C# — jak działa kopiowanie, gdzie żyją dane w stack i heap, oraz czym naprawdę jest boxing i unboxing. Przykłady,…
Czytaj więcej →
Csharp · Programowanie w C#Chcesz przestać kopiować kod między projektami i zacząć budować prawdziwą architekturę w .NET? W tym artykule pokażę Ci krok po kroku, jak stworzyć własny pakiet NuGet…
Czytaj więcej →
CsharpKlasa, którą chcesz przetestować, często zależy od innych klas — repozytorium bazy danych, klienta HTTP, wysyłki e-maili. Moq pozwala podstawić w ich miejsce “atrapę”, która zachowuje…
Czytaj więcej →
Csharp“Jaka jest różnica między class a struct?” to jedno z najczęstszych pytań rekrutacyjnych na Junior .NET Developera — i jedno z tych, na które większość kandydatów odpowiada teoretycznie (“struct…
Czytaj więcej →
CsharpNullReferenceException to najczęściej spotykany wyjątek w kodzie .NET — i przez dekady C# nie dawał kompilatorowi żadnego sposobu, żeby ostrzec cię o nim wcześniej niż w runtime.…
Czytaj więcej →
CsharpMutowalne klasy w C# to jeden z najczęstszych powodów trudnych do wykrycia bugów, nieczytelnego kodu i kosztownych refactorów. Jeśli kiedykolwiek kopiowałeś cały obiekt tylko po to,…
Czytaj więcej →
CsharpRegex w C#: Regex.IsMatch, Match, Replace i grupy nazwane na praktycznych przykładach. Plus realna pułapka bezpieczeństwa — katastrofalny backtracking (ReDoS).
Czytaj więcej →
CsharpKażde wywołanie Substring(), array.Skip(1).Take(3) czy string.Split() tworzy w pamięci nową kopię danych. W kodzie, który parsuje raz plik konfiguracyjny, to nieistotne. W kodzie, który parsuje tysiące wierszy na sekundę — te…
Czytaj więcej →
CsharpWszystkie trzy frameworki robią to samo: uruchamiają metody testowe i sprawdzają, czy wynik jest zgodny z oczekiwaniem. Różnią się atrybutami, sposobem parametryzacji i tym, jak bardzo…
Czytaj więcej →
CsharpJeśli czytałeś o Span<T> w C#, znasz już problem: kopiowanie danych przy każdym Substring() czy wycinku tablicy kosztuje pamięć i czas GC. Span<T> to rozwiązuje — ale ma jedno poważne ograniczenie: jako ref…
Czytaj więcej →