W części czternastej kursu Test-Driven Development omówimy technikę testowania zależności za pomocą atrap (jęz. ang. „mock”). Test jednostkowy z definicji testuje zachowanie w izolacji, a więc bez zależności zewnętrznych. Takimi zależnościami są najczęściej inne klasy lub interfejsy, które posiadają zachowanie.
Strona głównaUżytkownik
dariuszwozniak | użytkownik
Sztuka programowania 3328 dni, 9 godzin, 12 minut temu 164 źrodło rozwiń
Wzorzec projektowy „fluent interface” (polski odpowiednik… płynny interfejs…?) przyjął się w środowisku .NETowym bardzo dobrze. I słusznie! „Płynna syntaktyka” znacznie poprawia czytelność pisanego kodu. Jednym z sztandarowych przykładów jej użycia są asercje w testach.
IntelliTest to wewnętrzna funkcjonalność Visual Studio (Enterprise 2015), która służy do generowania tabeli danych wejściowych oraz zestawu testów jednostkowych. Dla danej metody generowane są dane wejściowe, w oparciu których mogą zostać wygenerowane testy jednostkowe. Przypadki testowe tworzone są w oparciu o analizę każdego skoku warunkowego (conditional branch). Co więcej, tabela przypadków testowych zawi...
Postanowiłem kiedyś stworzyć, na własne potrzeby, spis narzędzi dla TDD dla .NET. Z czasem, lista rozrosła się do narzędzi nie tylko związanych z TDD, ale także z testami akceptacyjnymi i BDD. Dokończyłem ten spis o pozostałe rodzaje testów i opublikowałem na GitHubie, tak żeby można było łatwiej aktualizować.
Sztuka programowania 3401 dni, 10 godzin, 19 minut temu 214 źrodło rozwiń
Ciekawym pomysłem na wydajniejszą (tak, jeszcze większą! :)) pracę z kodem jest dodatek do ReSharpera o nazwie Postfix. Idea polega na uzupełnianiu kodu w oparciu o różne wzorce, tzw. postfix, które pojawiają się po napisaniu naszego kodu. Innymi słowy, jest to połączenie „surround templates” i resharperowego Quick Fix (Alt+Enter). Postfix uzupełniamy jednak klawiszem Tab.
C# 5.0 wniósł wiele dobroci, m.in. obsługę wywołań asynchronicznych za pomocą słów kluczowych async i await. Rozwiązanie, ze względu na prostotę obsługi i skuteczność, cieszy się do dziś sporą popularnością. Jak testować wywołania asynchroniczne? Tego dowiemy się w tym odcinku!
Sztuka programowania 3440 dni, 12 godzin, 28 minut temu 331 źrodło rozwiń
Rzecz być może dla niektórych mało istotna, dla niektórych w ogóle nie istotna, ale niezależnie od istotności sprawy – myślę, że warta wpisu na blogu. NUnit posiada dwa modele asercji:Classic Assert ModelConstraint-Based Assert Model (wprowadzony w wersji 2.4) Semantyka klasycznego modelu jest wszystkim dobrze znana: Assert.AreEqual(5, sum); Assert.AreSame(personA, personB); Assert.IsTrue(condition); As...
Sztuka programowania 3608 dni, 15 godzin, 2 minuty temu 123 źrodło rozwiń
W niniejszym artykule przyjrzymy się w jaki sposób możemy przetestować klasy generyczne za pomocą funkcjonalności NUnita pod nazwą Generic Test Fixture. Dla przykładu, weźmy sobie metodę dodawania w generycznej klasie kalkulatora: public class GenericCalculator
Sztuka programowania 3608 dni, 15 godzin, 2 minuty temu 188 źrodło rozwiń
Doskonałym uzupełnieniem wpisów o testach parametryzowanych i kombinatorycznych jest omówienie tzw. „teorii”. Teoria jest specjalnym rodzajem testu, w którym weryfikujemy dane twierdzenie przy pomocy założeń (ang. assumptions).
Sztuka programowania 3641 dni, 12 godzin, 8 minut temu 171 źrodło rozwiń
Naturalnym krokiem po omówieniu testów parametryzowanych jest przejście do testów kombinatorycznych i sekwencyjnych. Do dyspozycji mamy dwa atrybuty NUnita — [Combinatorial] oraz [Sequential]. Sprawa jest bardzo prosta, więc zrozumienie działania tych dwóch funkcjonalności nie przysporzy żadnych problemów.
Sztuka programowania 3656 dni, 13 godzin, 33 minuty temu 170 źrodło rozwiń
W C# istnieje mało znana składnia do inicjalizacji zagnieżdzonych obiektów (nested object initializer syntax). Na czym polega cała zabawa? Spójrzmy na kod, za pomocą którego inicjalizujemy zagnieżdżony obiekt: Rectangle rectangle = new Rectangle { P1 = { X = 0, Y = 1 }, P2 = { X = 2, Y = 3 } };
Temat testów parametryzowanych pojawił się przy okazji pisania naszego „drugiego” testu jednostkowego. Wtedy to skorzystaliśmy z atrybutu [TestCase] pozwalającym na zdefiniowanie zestawów wartości, które są przekazywane do metody testowej. Stosując atrybuty do testów parametryzowanych (m. in. TestCase, Values, Range, Random) ograniczamy liczbę naszych metod testowych i redukujemy ilość redundantnego kodu.
Sztuka programowania 3782 dni, 8 godzin, 32 minuty temu 241 źrodło rozwiń
W tej części kursu zajmiemy się pojęciem inicjalizacji i czyszczenia danych. Wielkiej filozofii tutaj nie ma; w NUnit działa to tak:Jeśli chcemy, aby jedna z metod uruchamiała się przed każdym uruchomieniem naszego testu, aby np. inicjalizować dane, nakładamy na nią atrybut [SetUp].Jeśli zechcemy, aby metoda uruchamiała się po każdym uruchomieniu testu w celu np. czyszczenia danych — nakładamy atrybut [TearDown]...
Sztuka programowania 3981 dni, 8 godzin, 55 minut temu 143 źrodło rozwiń
W tej części opisane zostaną dobre i złe praktyki stosowane przy pisaniu testów jednostkowych. Co ciekawe, praktyki te odbiegają niekiedy od ogólnie przyjętych założeń i standardów kodowania. Przykładem może być zasada DRY—Don’t Repeat Yourself. W TDD kopiuj-wklej to niemal chleb powszedni; w TDD możemy stosować zasadę zgoła odwrotną—Do Repeat Yourself! Taka odrębność wynika z tego, że w kodzie testowym musimy zminimalizować prawdopodobieństwo pojawienia się błędu. Kod tes...
Sztuka programowania 4106 dni, 1 godzinę, 32 minuty temu 406 źrodło rozwiń
W tej części omówię jak wykonać kilka prostych technik, tj. jak:zgrupować testy za pomocą atrybutu [TestCase],testować wyjątki,testować zdarzenia. Na tapetę idzie przykład dzielenia; chcemy napisać funkcjonalność i testy mając na uwadze, że:metoda Divide należy do klasy Calculator,metoda Divide przyjmuje dwa parametry wejściowe — obydwa typu int; zwracanym ...
Sztuka programowania 4229 dni, 11 godzin, 48 minut temu 164 źrodło rozwiń
W tej części cyklu stworzymy nasz pierwszy test jednostkowy. Przedstawię krok po kroku jak napisać i przetestować prostą funkcjonalność wedle zasad TDD. Opiszę tutaj szczegółowo wszystkie kroki, począwszy od tego jak dodać referencję do NUnita, a skończywszy na tym jak uruchomić test.
Sztuka programowania 4244 dni, 17 godzin, 19 minut temu 241 źrodło rozwiń
Po wstępie i omówieniu różnic między testami jednostkowymi, a integracyjnymi, czas na omówienie jak strukturalnie powinien wyglądać wzorcowy test jednostkowy. Będzie to pewnie najkrótszy wpis tej serii, ale jednocześnie jeden z najważniejszych. Pozwoli bowiem na pierwszy kontakt z testem jednostkowym w praktyce.
Sztuka programowania 4254 dni, 11 godzin, 57 minut temu 144 źrodło rozwiń
Garść cytatów w kontekście Test Driven Development. Można je wykorzystać przy różnych okazjach, np. przy tworzeniu prezentacji albo przy rodzinnych bankietach ;)
Na witrynie techdays można obejrzeć wykład Roya Osherove pt. A Second Look at Unit Testing z tegorocznej konferencji Microsoft SWIT 2013 w Kijowie. Z wykładu dowiemy się m.in.:co się zmieniło i co zdezaktualizowało w świecie Test-Driven Development od czasu pierwszej edycji książki Art of Unit Testing (2009), jakie frameworki do izolacji (isolation frameworks) są obecnie na topie,dlaczego nie korzystać z Rhino Mocks, NUnit.Mocks i M...
Sztuka programowania 4277 dni, 5 minut temu 148 źrodło rozwiń
W części drugiej kursu przyjrzymy się rodzajom testów w świecie Test-Driven Development i poznamy różnice między testami jednostkowymi, a integracyjnymi.
Sztuka programowania 4277 dni, 22 godziny, 45 minut temu 743 źrodło rozwiń