Code Contracts–programowanie defensywne

Code Contracts stanowią kolejny mechanizm ułatwiający programowanie defensywne – sposób wytwarzania oprogramowania odporny na wszelkie niespodziewane wartości (NULL, dzielenie przez zero, wartości skrajne itd.) Rozważmy klasyczny przykład – funkcja dzielenia: private float Divide(float dividend, float divisor) { if (divisor == 0) throw new DivideByZeroException(); return dividend / divisor; } Składnia trochę prostsza ale to chyba […]

CONSUMER DRIVEN CONTRACTS w PACT-NET – implementacja testów dostawcy

W poprzednim wpisie przedstawiłem framework PACT.NET. Zdołaliśmy zaimplementować testy po stronie konsumentów. Wynikiem tego, był wygenerowany plik JSON zawierający nagrane testy. Dla przypomnienia, test po stronie konsumenta wyglądał następująco: Z kolei wygenerowany JSON: Przejdźmy zatem do testu po stronie dostawcy: W celu uruchomienia serwera, używamy Microsoft.Owin.Testing czyli klasy TestServer. W momencie odpalenia testu, zostanie zatem […]

Code Review: Złe użycie kontraktów w interfejsach

O kontraktach już kiedyś pisałem tutaj. Dziś z kolei zaprezentuję bardzo złą praktyką, czasami niestety jeszcze spotykaną tzn.: interface IDataFilter { IEnumerable<int> Filter(IEnumerable<int> data); } class CustomFilter:IDataFilter { public IEnumerable<int> Filter(IEnumerable<int> data) { Contract.Requires(data!=null); // jakas logika return new int[0]; } } Dlaczego? Powyższy kod łamie zasadę Liskov. W skrócie, nie powinniśmy zmieniać zasady działania […]

Antywzorce w pisaniu testów

W kolejnych kilku wpisach przedstawię parę luźnych porad odnośnie pisania testów. Nie będzie to żaden przewodnik, ale moje własne spostrzeżenia nabyte podczas przeglądania kodu różnych projektów. Zacznę od pewnego anty-wzorca, znalezionego na blogu http://watirmelon.com/: Na rysunku widać skrajnie złą sytuację w systemie – liczbę testów w zależności od kategorii. Powinno być dokładnie odwrotnie (na górze […]

Visual Studio 2015: Smart Unit Tests

Jeśli jeszcze nie ściągneliście VS 2015, to zapraszam: http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs.aspx Smart Unit Tests to sposób automatycznego wygenerowania scenariuszy dla testów jednostkowych. Wiele o tym już na blogu jak i w artykułach na MSDN pisałem, a konkretnie o Pex & moles. Chciałbym dzisiaj jednak zaprezentować wbudowaną funkcję w VS 2015. Nie wymaga ona instalacji zewnętrznych narzędzi. Na […]

Pure methods

Nie wiem, czy istnieje jakieś bardziej oficjalne tłumaczenie pure methods,więc aby uniknąć śmiesznych nazw przez resztę postu będę posługiwał się nazwą angielską. Nie chodzi mi o metody czysto wirtualne, które są powszechnie znane.  W .NET istnieje atrybut PureAttribute, którym możemy oznaczać metody pure. Warto zacząć jednak od czystej definicji, czym jest metoda pure? W skrócie […]

Publikacja i subskrypcja zdarzeń (przykład), część VII

Dziś o kolejnym, moim zdaniem jednym z najważniejszych elementów programowania rozproszonego, a mianowicie o zdarzeniach. Jak w każdej analogicznej technologii, mamy zaimplementowany wzorzec obserwator. Każdy węzeł może nasłuchiwać konkretnej wiadomości i jak tylko zostanie ona opublikowana, wszyscy subskrybenci zostaną poinformowani. Zacznijmy od przykładu. W poprzednich wpisach stworzyliśmy Example.API oraz klienta. Dzisiaj rozszerzymy solucję o dwa […]

nServiceBus, część II–pierwszy przykład obsługi wiadomości

W poprzednim w poście było dość teoretycznie, ale o to mi chodziło. Nie chciałem tworzyć wszystkich wpisów wyłącznie o API. Dzisiaj z kolei będzie już prosty przykład, na którym później będziemy testować to co zostało opisane w pierwszym poście. Zacznijmy od zdefiniowania wiadomości, którą chcemy wysyłać. Zwykle tworzy się osobny projekt dla nich. Stwórzmy więc […]

ASP.NET MVC Web API, wprowadzenie

W dzisiejszym poście będzie o tzw. Web API. Usługi REST są dzisiaj już wszechobecne ze względu na liczbę dostępnych platform oraz co za tym idzie, skalowalność. Web Api ułatwia pisanie serwisów REST. Nic nie stoi na przeszkodzie, abyśmy używali starego podejścia czyli implementacji akcji w klasycznych kontrolerach. Web Api jednak ułatwia pracę z REST oraz […]

Pisanie solidnego kodu: Constrained Execution Regions (CERs)

Z pewnością każdy z Was odpowiedziałby, że pisze solidny kod. Oczywiście zależy to od przyjętych metryk i definicji “solidny kod”. Nie zawsze warto skupiać uwagę na drobiazgach  i pułapach, których jest na prawdę wiele. Czasami jednak jest to konieczność, głównie w aplikacjach serwerowych, które muszą działać, nawet, gdy dostarczone dane są np. nieprawidłowe. W przypadku […]