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 3265 dni, 2 godziny, 59 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 3338 dni, 4 godziny, 6 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 3377 dni, 6 godzin, 15 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 3545 dni, 8 godzin, 49 minut temu 123 źrodło rozwiń
Dzisiaj będzie o ludziach. Aż sam się dziwię, że taki post spod ręki mej wychodzi… ale jednak. Czy zdajesz sobie sprawę z tego, że robiąc COKOLWIEK ponad normę, jesteś źródłem wielkiej inspiracji? Tak, TY! Czy zdajesz sobie sprawę z tego, że wokół znajdziesz niewyczerpane studnie głębinowe motywacji, tylko czekające na odkrycie? Tak, przez CIEBIE!
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 3545 dni, 8 godzin, 49 minut 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 3578 dni, 5 godzin, 55 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 3593 dni, 7 godzin, 20 minut 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 3719 dni, 2 godziny, 19 minut 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 3918 dni, 2 godziny, 42 minuty 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 4042 dni, 19 godzin, 19 minut 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 4166 dni, 5 godzin, 35 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 4181 dni, 11 godzin, 6 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 4191 dni, 5 godzin, 44 minuty 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 ;)
Wprowadzenie Wzorce projektowe mają na celu rozwiązanie najczęściej spotykanych problemów związanych z pisaniem kodu. W przypadku warstwy prezentacji można wykorzystać m. in. następujące rozwiązania: MVC, MVP czy Model-View-ViewModel. Ze względu na mechanizm wiązań (binding), programistom WPF oraz Silverlight, polecany jest wzorzec MVVM – jest to technologia umożliwiająca bardzo łatwą implementację wzorca.K...
Architektura 4213 dni, 17 godzin, 52 minuty temu 560 źrodło rozwiń