Przez kilka ostatnich wpisów poruszałem temat BDD, a konkretniej jednego z framework’ow – SpecFlow. Dzisiaj o kolejnym rozwiązaniu, które jest przydatne, gdy programiści definiują specyfikacje. SpecsFor można zainstalować standardowo z NuGet: Załóżmy, że będziemy rozpatrywać następujący kod...
Strona głównaUżytkownik
Paweł Łukasik | użytkownik
Sztuka programowania 3838 dni, 19 godzin, 28 minut temu 162 źrodło rozwiń
W następnym poście mam zamiar napisać o SpecsFor, kolejnym framework’u ułatwiającym pisanie testów BDD. Najpierw jednak chciałbym przedstawić expectedObjects oraz Should Assertion Library, które są składowymi SpecsFlow. Wszystkie z wymienionych bibliotek można zainstalować przez NuGet. Should Assertion Library to mała biblioteka ułatwiająca asercje danych. W standardowych unit testach zwykle piszemy coś w stylu:Assert.IsTrue(value); Assert.IsNull(value); Assert.AreEqual(actualValue,expectedValue) Jes...
Scenka1 Facet idzie sobie przez las i napotyka gościa wycinającego siekierą choinki - Panie co pan robisz! Dlaczego dewastujesz las? Nie dewastuję lasu tylko zaciągam dług leśny. Będą święta, na choince powieszę bombki to rodzina będzie zadowolona. No a później posadzę nowe choinki w to miejsce. A kiedy to zrobisz? no za trzy sprinty... Scenka2 Facet idzie sobie przez osiedle i spotyka gościa, który wywala gruz do piaskownicy - Dlaczego dewastujesz plac zabaw? Nie dewastuję placu zab...
Sztuka programowania 3841 dni, 20 godzin, 13 minut temu 422 źrodło rozwiń
Obiekty Hub mają z góry określony czas życia. Ten sam obiekt nie jest współdzielony pomiędzy różne wywołania. Jeśli klient wywołuje metodę, instancja huba jest tworzona od nowa. Oznacza to, że nie możemy przechować stanu między zapytaniami w następujący sposób
Dzisiaj trochę więcej szczegółów na temat, jak można wywoływać metody w Hub API. W ostatnim wpisie, zaimplementowaliśmy klasę, która wykonuje metodę po wszystkich klientach (broadcast). SignalR ma ogromne możliwości i istnieje wiele innych wzorców. Dla przypomnienia broadcast wygląda następująco:publicvoid SendMessage(string message) { Clients.All.newMessage(string.Format("{0}: {1}",DateTime.Now,message)); } Clients posiada kilka metod, służących do wysyłania wiadomości w różnych sposób. Na przykła...
Ten post jest częścią cyklu o Dependency Injection. Ostatnim razem rozstaliśmy się w takim napięciu, że aż jeden z Czytelników nazwał to cliffhangerem (nauczyłem się nowego słowa!). Zanim jednak zaczniemy przyglądać się rozwiązaniu naszej niewesołej sytuacji (nie kompiluje się, buuu): chwila refleksji i nader trafnego (a jak!) porównania. Znacie te potworki przedstawione na obrazku? Matrioszka. Ruska drewniana baba...
Sztuka programowania 3863 dni, 21 godzin, 37 minut temu 281 źrodło rozwiń
Ptacy ćwierkali już od jakiegoś czasu, że JetBrains coś szykuje. Ja byłem praktycznie pewny, że nie będzie to IDE dla C#, bo ten temat wałkowany jest właściwie od lat. Więc… cóż to mogła być za niespodzianka? Okazało się, że jest to 0xDBE: nowe IDE, tyle że nie do C#. Jest to IDE do pracy z bazami danych! Ucieszyłem się niezmiernie, ponieważ już 5 lat temu pisałem, że nienawidzę Management Studio (“Dlaczego ni...
Bazy danych i XML 3863 dni, 21 godzin, 37 minut temu 276 źrodło rozwiń
Kiedyś na stronach MS widziałem rekomendację mówiącą “używaj typów wyjątków dostarczanych przez framework”. Jakiś czas temu, na jakimś polskim chyba blogu, przeczytałem tego powtórkę. Wiecie co? U mnie się doskonale sprawdza kompletne przeciwieństwo tej praktyki. Zawsze w swoich aplikacjach staram się mieć jeden bazowy typ wyjątku, abstrakcyjna klasa MyAppException: Exception. Dzięki temu jestem w stanie wyłapać wszystko co rzuca mój...
Sztuka programowania 3879 dni, 4 godziny, 14 minut temu 254 źrodło rozwiń
Zanim zajmiemy się faktycznym wstrzykiwaniem zależności, to najpierw musimy mieć co wstrzykiwać! Statycznej klasy nie wstrzykniemy przecież, jakkolwiek byśmy wstrzykiwać nie chcieli. Na początek zatem: zidentyfikujmy składowe procesu rejestracji użytkownika, które w ogólnie nie powinny znajdować się w kontrolerze. Pewniakiem jest tutaj walidacja poprawności adresu e-mail. Nie dość, że bardzo ładnie da się to...
Sztuka programowania 3885 dni, 4 godziny, 55 minut temu 193 źrodło rozwiń
Jak można było dowiedzieć się z moich ostatnich postów społecznościowo-konferencyjnych (jeden, drugi, trzeci), miałem ostatnio prezentacje na temat Dependency Injection. Dość dziwne jest to o tyle, że na ten temat nie blogowałem właściwie od czterech lat. Pora zaległości nadrobić:). Pojawiły się za to treści gdzieś indziej. Po jednym z moich występów Basia podjęła temat. Po jej poście Paskol też coś naskrobał. A i w polskiej-anglo...
Architektura 3893 dni, 19 godzin, 55 minut temu 331 źrodło rozwiń
The problem I would like to discuss is an API call, where you need to send binary data (for example multiple images) and some metadata information together. There are various ways you can approach this, and I will describe them briefly. Then I will go into more detail on multipart/form-data requests and how they can help you with the mentioned task.Approach 1 – Send metadata and files in separate requests The steps could be this:Send metadata to server Server stores metadata and generates an unique URL...
Ach święta, czas jedzenie i nie policzalnych kalorii. A gdy ktoś ma szczęście, to także czas błogiego programowania bez żadnych zobowiązań. To także czas kiedy można przysiąść i poczytać. Udało mi znaleźć chwilę i posiedziałem, czytałem i czytałem i nie mogłem przestać, bo ciągle nie miałem rozwiązania swojego problemu. Chciałem zaimplementować "Owin Identity" w asp mvc, a w internetach chciałem znaleźć rozwiązanie podane na talerzu. Spędziłem cały dzień wpisując coraz to różne i kombinacje słów "owin, i...
W ASP.NET MVC do dyspozycji jest dość mało popularny atrybut Bind, który pozwala określić zachowanie bindingu pomiędzy modelem a widokiem. Załóżmy, że mamy następujący model:publicclass Person { publicstring FirstName { get; set; } publicstring LastName { get; set; } publicstring Email { get; set; } } Następnie napiszemy prostą akcję, zwracającą model do widoku:public ActionResult Create() { var person=new Person(); return View(person); } Widok stanowić będzie prosty formularz:@using ...
Debugging is a lot like police forensics. You’re chasing the villain (bug) by analyzing eye-witness accounts (users’ reports), inspecting the crime scene (source code), and combing through often the most helpful resource: CCTV recordings (application logs), if only their quality allows. I got upset lately, looking for the needle in a stack of log spam: People who argue that it's "useful" to keep DEBUG level logging in produc...
Sztuka programowania 3939 dni, 21 godzin, 56 minut temu 208 źrodło rozwiń
Gdy zaczynałam swoją przygodę z programowaniem w Windows Phone (jakoś w maju zeszłego roku) okazało się, że to nie jest po prostu kolejny rodzaj projektu w Visual Studio. A szkoda, bo samo rozpoczęcie pracy, czy przeglądnięcie kodu, który zastałam w nowej pracy, wymagało wielu instalacji. Jasne, że wiele z nich dotyczyło konkretnych bibliotek użytych w projekcie, jednak kilka ruchów było niezbędnych, by w ogóle zacząć pracę z platformą. Postanowiłam opisać dla potomności te moje pierwsze kroki, a nuż kto...
Mobile development 3950 dni, 10 godzin, 52 minuty temu 294 źrodło rozwiń
Simple.Data jest super. A ostatnio okazało się jeszcze… supersze. Chciałem wygenerować zapytanie update “doklejające” pewną wartość do kolumny tekstowej. W Postgre byłoby to coś takiego: update people set StatusUpdate = StatusUpdate || "new status," where id=1 Jak widać – robię update jednocześnie odwołując się do wartości kolumny z aktualizowanego wiersza To by akurat nie zadziałało dla pierwszej “iteracji”, bowiem “null || string” zwró...
Bazy danych i XML 3970 dni, 6 godzin, 48 minut temu 181 źrodło rozwiń
Tworząc stronę internetową często potrzebujemy sprawdzić poszczególne składowe bez wracania do środowiska programistycznego. Narzędzia w przeglądarce Internet Explorer pozwalają analizować elementy widziane na stronie ze względu na budowę kodu HTML i CSS oraz sprawdzić logikę napisaną w języku JavaScript. Za...
Dzisiaj kolejny wpis o podstawach ASP.NET MVC. Tym razem chciałbym pokazać czym różnią się metody RenderBody, RenderSection, RenderPage oraz RenderPartial. Zacznijmy od najbardziej znanej metody, RenderBody. Korzystamy z niej w przypadku zdefiniowanego Layout’u. Tworząc nowy, domyślny projekt automatycznie zostanie dodany w folderze shared plik _Layout.cshtml. Definiuje on domyślny szablon czyli zwartość, która jest powtarzana na każdej podstronie. Zamiast duplikować cześć wspólną (menu, stopka itp.) na...
W sieci można znaleźć mnóstwo przykładów w jaki sposób projektować aplikację. Tyle samo, albo i więcej, jest pytań programistów. Jedni szukają wiedzy, bo dopiero wchodzą w ten fascynujący świat. Inni szukają tylko potwierdzenia czy własne pomysły się sprawdzą. Sam nie raz szukałem odpowiedzi na pytanie czy moja koncepcja jest już przez kogoś gdzieś użyta. Jeśli znalazłem rozwiązanie, które było podobnie zrealizo...
Architektura 3978 dni, 21 godzin, 42 minuty temu 312 źrodło rozwiń
Czyżbym wrócił do formy z blogiem? Niektórzy może pamiętają, a inni nie, ale walczę z takim tam sobie prywatnym projekcikiem. Otóż nastał tam etap refaktoringu i właśnie wtedy postanowiłem, że trzeba wreszcie przenieść rejestrację komponentów w IOC z kodu do configa. Używam Autofac, więc zerknełem w dokumentację i dociągnełem 'Autofac.Configuration' z NuGeta, jest to potrzebne aby móc grzebać z configu. Zaraz potem wziełem się do roboty,wycinek wygląda tak: Trzeba dodać informację o nowej sekcji: ...
Sztuka programowania 3990 dni, 5 godzin, 52 minuty temu 153 źrodło rozwiń