Zgłębiając arkana tworzenia testów jednostkowych z wykorzystaniem mock objects możemy natknąć się na trzy szkoły/sposoby pisania kodu. Zwykle możliwe jest zastosowanie więcej niż jednego podejścia za pomocą danej biblioteki. Wszystkie jednak charakteryzują się podobnymi "etapami": musimy stworzyć środowisko testowe, wykonać testowane operacje oraz sprawdzić ich poprawność. Różnice polegają na składni oferowanej przez framework oraz niejawnych założeniach sygnalizowanych przez daną meto... [More]

Linkowanie repozytoriów: svn externals

29 lipca 2009 06:05 w kategorii: pro
Chyba każda firma ma zestaw własnych bibliotek czy konfiguracji pomagających tworzyć oprogramowanie w ten "jedyny właściwy", wymyślony przez kogoś ważnego sposób. Narzędzia te wykorzystywane są przez wszystkie tworzone projekty oraz nieustannie rozwijane wraz z ewolucją wymagań czy zmianami na jakimś ważnym stanowisku :). Ale jak dopilnować, żeby nie mnożyły się identyczne (a z czasem oczywiście rozjeżdżające się) KOPIE takich wspólnych plików? Taka sytuacja – każdy projekt w osobnym r... [More]

Dynamic Mock vs Strict Mock vs Stub

27 lipca 2009 06:06 w kategorii: pro
Tagi: ,
Zapoznając się z tematyką testów jednostkowych napotykamy podział mocków na trzy grupy: Dynamic Mock, Strict Mock oraz Stub. Dziś pora na poruszenie tego tematu wraz z prezentacją jak je wykorzystać w Rhino Mocks. Stub Stub jest niczym innym jak głupią i najprostszą implementacją zadanego interfejsu. Nie możemy go w żaden sposób przetestować, nie możemy sprawdzić jakie metody zostały na nim wywołane. Stub ma jednak jedną cechę, która czyni go niezastąpionym elementem testów jednostkowych: może... [More]

Wybór mock-object framework

22 lipca 2009 06:35 w kategorii: pro
Tagi: ,
Przed rozpoczęciem wykorzystywania mocków w swoim projekcie musimy zdecydować się z jakiego wspomagacza skorzystamy. Wiemy jedno: nie chcemy tworzyć mocków ręcznie (jak zostało to przedstawione tutaj). Zobaczmy więc co nam, programistom .NET, oferuje w tym zakresie wszechposiadający, uzależniający i niczym tlen niezastąpiony INTERNET. Nie jest moim zamierzeniem dokładna prezentacja i porównanie dostępnych rozwiązań - rzucę raczej okiem na kilka możliwych ścieżek. Przed dalszą lekturą można na ... [More]

Pisząc testy jednostkowe często musimy brać skądś testowe wartości, których wykorzystanie będziemy następnie weryfikować. Przy okazji ostatniego posta mieliśmy takie linijki: 1: string userName = "testUserName"; 2: string password = "testPassword"; Łatwo jednak sobie wyobrazić ile takich miejsc może pojawić się w skali całego projektu. Tysiące! I czy będzie się komuś chciało nadawać każdej zmiennej sensowną wartość? Wątpię. Z pewnością bardzo szybko da się za... [More]

Mock Objects - pierwszy test krok po kroku

16 lipca 2009 06:31 w kategorii: pro
Tagi: ,
W poprzednim poście zapoznaliśmy się z pojęciem "mock". Dzisiaj krok po kroku napiszemy pierwszy test jednostkowy z wykorzystaniem ASP.NET MVC, nUnit oraz RhinoMocks. Do dzieła. 1) Tworzymy projekt ASP.NET MVC Z odpowiedniej strony ściągamy instalator i... instalujemy. W VS wchodzimy w okno tworzenia nowego projektu i w sekcji Web wybieramy aplikację ASP.NET MVC. Po podaniu nazwy i lokalizacji kreator spyta nas czy utworzyć projekt dla testów jednostkowych. Jak widać domyślnie na liś... [More]

Społecznościowe cyborgi z Krakowa, czyli Krakowska Grupa Developerów .NET (KGD), wpadły na pomysł wstrzelenia się pomiędzy dwie duże konferencje programistyczne europejskiego formatu i skorzystania z kilkudniowej przerwy między nimi. Co mają robić podczas owej przerwy światowej sławy prelegenci występujący na obu tych wydarzeniach? Oczywiście: zawitać do Krakowa:). Żeby nie przedłużać, podlinkuję ogłoszenie i apel organizatorów jesiennego CodeCamp: "CodeCamp w październiku - szukamy sponsorów + ... [More]

To co teraz czytacie jest początkiem serii postów o tworzeniu testów jednostkowych z użyciem mocków (btw: zna ktoś polskie tłumaczenie tego słowa?). Jak na początek przystało – dziś krótkie wprowadzenie. Testy jednostkowe badające poprawność zależności i integracji na poziomie pojedynczych klas wykorzystują specjalnie spreparowane, proste i na swój sposób "głupie" implementacje wymaganych przez dany komponent części systemu. Między innymi stąd tyle mówi się o Inversion of Control, c... [More]

Goodbye Zine. Powrót na stare śmieci.

13 lipca 2009 06:19 w kategorii: priv | pro
Tagi: ,
Po kilkumiesięcznych (sic!) rozważaniach postanowiłem, że uciekam z Zine’a. Od tej chwili wracam na stare śmieci. Reaktywuję możliwość dodawania komentarzy na swoim prywatnym blogu, nowe posty będą pojawiać się również tylko tam. Zainteresowanych zachęcam do regularnego odwiedzania. Godne uwagi adresy: the blog itself RSS dla postów RSS dla komentarzy Nadal będzie ciekawie (o ile było do tej pory) :). Jeżeli zauważysz błąd w działaniu bloga (wprowadzałem tam ostatnio kilka zmian) to daj... [More]

Alternatywa dla Convert.ChangeType()

9 lipca 2009 06:45 w kategorii: pro
Tagi: ,
Drugi raz w ciągu kilku dni przytrafiły mi się kłopoty podczas wykorzystania metody Convert.ChangeType(). Scenariusz jest bardzo prostu: mam wartość pobraną skądś-tam (baza danych, http request czy cokolwiek innego) reprezentującą znany mi typ, jednak przechowywaną w postaci stringa. Wszystko śmigało jak trzeba dopóki traktowałem w ten sposób zwykłe liczby i daty. Jakiś czas temu wpadł mi tam Guid, co skończyło się wyjątkiem InvalidCastException. Teraz z kolei to samo przytrafiło się dla TimeSpa... [More]

Pantoflowo-aspektowe sko_dev_jarzenie

6 lipca 2009 06:24 w kategorii: pro
Niedawno podczas koleżeńskiej konserwacji wypłynął nam temat pantoflarstwa, czyli bezwarunkowej podległości osobnika płci męskiej pod swego żeńskiego w życiu partnera. Swoją Panią. I nieuchronnie już wówczas do głowy napłynęła mi myśl, jak taką sytuację można doskonale zamodelować przy użyciu PostSharp – godnego uwagi darmowego narzędzia do programowania aspektowego w .NET. Przysiadłem na chwilę, ściągnąłem Post#, zaimplementowałem minidemko i je niniejszym prezentuję: Zaczynamy od naszego M... [More]

ASP.NET MVC - Reflector vs DropDownList

2 lipca 2009 06:22 w kategorii: pro
Kolejny odcinek o Reflectorze i MVC, tym razem opowieść spod znaku "przecież to NIE MOŻE nie działać!". Oczywiście bezlitosna rzeczywistość twierdziła inaczej i jak zwykle w takich wypadkach bywa – to ona była górą. Zobaczmy cóż takiego się stało... Jak zwykle dla uproszczenia stworzę bezsensowny projekcik specjalnie pod ten scenariusz, aby każdy mógł w prosty sposób odtworzyć cały proces. Praktyki stosowane podczas implementacji wcale nie muszą być godne naśladowania, po prostu chodz... [More]