Kurs TDD cz. 14: Testowanie zależności – atrapy obiektów

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.

Testy jednostkowe powinny być wykonane w izolacji, gdyż zewnętrzne zależności mogą być:

– czasochłonne,
– niezaimplementowane lub nieukończone (np. interfejs, klasa abstrakcyjna, zalążek metody, pusta metoda),
– niedeterministyczne lub niepowtarzalne (np. aktualny czas),
– związane z dużą ilością innych klas (high class coupling),
– związane ze stanami, które są trudne do powtórzenia.

Czytaj dalej

„Płynne asercje”, czyli jak ułatwić sobie życie korzystając z Fluent Assertions?

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. Pytanie który z poniższych zapisów jest bardziej naturalny?

Zwykły proszek, ekhm asercja:

Assert.AreEqual("Jan", firstName);

czy odpowiednik „fluent”:

firstName.ShouldBe("Jan");

Wybór pozostawiam Tobie, czytelnikowi, gdyż każdy ma swój gust. Niemniej jednak warto zaznajomić wiedzę na temat płynnych asercji.

Czytaj dalej

Automatyczne generowanie testów jednostkowych: IntelliTest

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 zawiera scenariusze, które nie zostały obsłużone w naszej logice biznesowej, a które zwracają wyjątek (np. NullReferenceException lub dzielenie przez zero).

IntelliTest współpracuje natywnie z MSTest oraz poprzez rozszerzenia z xUnit.net i NUnit.

7167.2015_2D00_09_2D00_30_2D00_IntelliTest1_5F00_5C49D3D5

Czytaj dalej

Lista narzędzi i frameworków do testowania (TDD / BDD / ATDD / itd.) dla .NET

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ć.

Zestawienie znajduje się pod linkiem: https://github.com/dariusz-wozniak/List-of-Testing-Tools-and-Frameworks-for-.NET.

Czytaj dalej

C# Pro Tip: ReSharper Postfix

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. Cały pomysł najlepiej obrazuje poniższa animacja:

Czytaj dalej