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 →
CsharpPattern Matching w C# – switch expressions i type patterns Otwierasz klasę z logiką biznesową i nagle dostajesz w twarz „drabiną” instrukcji if-else, która ciągnie się…
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# — stack, heap i boxing na przykładach Napisz taki kod i zapytaj o wynik dowolnego początkującego programistę: Jeśli nie…
Czytaj więcej →
CsharpJak stworzyć i opublikować pakiet NuGet w .NET (C#) Chcesz przestać kopiować kod między projektami i zacząć budować prawdziwą architekturę w .NET? W tym artykule pokażę…
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 →
CsharpW poprzednim artykule “Class, struct czy record w C#?” ustaliliśmy, że struct to typ wartościowy — żyje na stosie (albo inline wewnątrz obiektu), nie może być…
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 →
CsharpC# Records i wyrażenie with – niemutowalny kod bez boilerplate’u Mutowalne klasy w C# to jeden z najczęstszych powodów trudnych do wykrycia bugów, nieczytelnego kodu i…
Czytaj więcej →
CsharpRęczne parsowanie wzorców tekstowych przez IndexOf/Substring szybko robi się kruche — każdy nowy przypadek brzegowy to kolejny if. Wyrażenia regularne (regex) opisują wzorzec deklaratywnie, jednym ciągiem znaków, zamiast proceduralnie krok…
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 →
CsharpZaczynasz naukę C# i już na starcie trafiasz na ścianę nazw: .NET Framework, .NET Core, .NET 5, .NET 6, .NET 8, .NET 9… W dodatku ktoś…
Czytaj więcej →