Poszukując sposobów automatycznego testowania aplikacji natrafiłem na ciekawą funkcjonalność Visual Studio 2010 Ultimate. Mianowicie w tej wersji naszego ulubionego IDE znalazło się miejsce na nowy typ testów - Coded UI Test. Coded UI Test jest to automatyczny test UI, który tworzymy poprzez nagrywanie akcji jakie wykonujemy w naszej aplikacji. Nie musimy pisać ani jednej linijki kodu żeby przetestować jakąś funkcjonalność naszego programu. Jedyne co musimy zrobić jest to przejście przez wszystkie niezbę...
Każdy z nas w trakcie zawodowej kariery miał (nie)przyjemność pracować z systemami kontroli wersji. Codziennie w trakcie swojej pracy wrzucamy, pobieramy z nich pliki, rozwiązujemy konflikty. Wiemy po co je używać, ale czy wiemy jak? Tak jak w każdej dziedzinie życia pewne rzeczy można robić lepiej lub gorzej. W tym artykule postaram się pokazać kilka dobrych zasad ciągłej integracji (Continuous Integration), które pozwolą usprawnić trochę ten proces. Na koniec przedstawię przykład jak w...
Architektura 4076 dni, 12 godzin, 51 minut temu 60 źrodło rozwiń
Na blogu oraz MSDN pisałem niejednokrotnie o testach jednostkowych oraz integracyjnych. Ostatnio jednak zastanawiałem się nad podstawowym problemem – jak zorganizować to od strony struktury katalogowej? Musimy rozważyć następujące problemy:Testy powinny być w każdej chwili dostępnie do odpalenia i weryfikacji.Wykonując prostą refaktoryzację (zmiana nazwy klasy), automatycznie nazwa powinna zaktualizować się w testach.Testy jednostkowe stanowią dobrą dokumentację oraz instrukcję używania zaimplementowanej...
Dzisiaj będę się chwalił się swoją niewiedzą. Kilka dni temu kolega zadał mi pytanie, którym skutecznie mnie zagiął. Ponieważ uważam, że głupotą nie jest brak wiedzy co raczej udawanie, że się ją posiada, czym prędzej się Wam tym pytaniem chwalę. Co zostanie wyświetlone po takim kodzie i dlaczego? string string1 = "Test"; string string2 = string1; string string3 = "Test"; Console.WriteLine(Equals(string1, string2)); // 1. Console.WriteLine(Equals(string1, string3)); // 2. Console.WriteLine(ReferenceE...
Na tak postawione pytanie aż chciałoby się odpowiedzieć: "testować wszystko, you fool!". Życie uczy jednak, że takie podejście jest bardzo niepraktyczne i na dłuższą metę nie ma sensu. Dążenie do pokrycia 100% kodu mija się z celem i jest po prostu stratą czasu. O powodach pisania testów pisałem na początku tego cyklu. Są jednak miejsca, w których koszt napisania testu jest bardzo duży, a jego wartość - znikoma. Zacznijmy więc od odpowiedzi na trudniejsze pytanie. Czego nie testować?
Można prościej Pewnie większość programistów SQL Server'a już zapoznała się ze zmianami w sposobie deklarowania i inicjalizacji zmiennych w wersji MS SQL Server 2008. Aczkolwiek, dla tych którzy jeszcze o tym nie czytali przygotowałem krótkie demo (dzisiaj 289 sekund, więc trochę długo), w którym przepisuje kod napisany w stylu T-SQL'a z MSSQL 2000 na wersję 2008.
Bazy danych i XML 4076 dni, 16 godzin, 44 minuty temu 164 źrodło rozwiń
autor: Jakiś czas temu próbując wykonać operację merge w TFS napotkałem na bardzo irytujący problem pod tytułem: TF203015 The Item '' has an incompatible pending change. Nie robiłem nic bardzo skomplikowanego. Najpierw pobrałem do gałęzi A zmiany umieszczone na półce (ang. shelve). Następnie, przy pomocy polecenia merge, chciałem do nich dodać zmiany z changeset'a z gałęzi B i w tym momencie pojawił się powyższy komunikat. Sprawdziłem też odwrotną kolejność czyli najpierw merge z gałę...
W przyszłych postach chcę zająć się Reactive Extensions, jednak zanim zacznę cykl postów o tym, najpierw przedstawię dwa interfejsy wprowadzone w .NET 4.0. Interfejsy umożliwiają implementację wzorca obserwator. IObserver powinien zostać zaimplementowany dla klasy, która chcę być powiadamiana o zmianach dokonywanych na klasie implementującej IObservable. Przyjrzyjmy się najpierw metodom IObserver:OnCompleted – obserwacja wszelkich zmian zakończona.OnError – wystąpił błąd.OnNext – Nowa zmiana np. dodano e...
Z klasami częściowymi większość programistów c# prawdopodobnie miała już styczność. Klasycznym przykładem jest rozbicie klasy Form na część wygenerowaną przez Visual Studio oraz na część przeznaczoną do modyfikacji przez programistę. Metody częściowe są bardzo podobnym mechanizmem. W skrócie są to metody, które można definiować w dwóch różnych plikach. Zdecydowałem się o nich napisać ponieważ wydaje mi się, że są mniej znane, a czasami mogą okazać się przydatne. Sama deklaracja jest analogiczna do klas ...
Wczoraj w pracy natknąłem się na, na pierwszy rzut oka, banalny problem, który jak to często bywa po drugim rzucie okazał się trudniejszy niż zakładałem. Ale po kolei...
Bazy danych i XML 4079 dni, 20 minut temu 140 źrodło rozwiń
W poprzednich wpisach opisałem ogólne zasady metodyki Scrum, przedstawiłem sposób instalacji i konfiguracji - TFS. W tym wpisie pokażę podstawowe zasady jak połączyć teorię z praktyką. Podobnie jak w poprzednich wpisach bazował będę na Team Foundation Server 11 DP, konieczne również będzie Visual Studio 11 DP.
W kilku najbliższych postach postaram się przybliżyć ideę zarządzania projektem w metodyce Scrum przy pomocy Team Foundation Server (TFS). W tym poście opiszę zasady i cechy jakimi charakteryzuje się SCRUM. W kolejnych przedstawię jak TFS może nam pomóc w prowadzeniu projektu w tej metodyce. Ponieważ, mimo posiadanego doświadczenia w niej nie czuję się ekspertem będę bardzo rad z każdego, nawet najbardziej krytycznego komentarza, który pozwoli udoskonalić mi te wpisy.
Storyboardy są bardzo wdzięcznym mechanizmem animacji do umieszczania w kodzie XAML. Attached properties, definiowanie targetu na podstawie nazwy obiektu… Szybko, sprawnie i przyjemnie. Sprawy mają się gorzej jeżeli musimy zdefiniować taką samą animację do wielu obiektów. Całkowita komplikacja następuje w momencie kiedy musimy animować obiekt dodany dynamicznie...
Silverlight 4079 dni, 19 godzin, 33 minuty temu 208 źrodło rozwiń
W ramach serii postów dotyczących Reactive Extensions przyjrzeliśmy się już problemom związanych z asynchronicznością oraz przyjrzeliśmy się bliżej kolekcjom i wzorcu obserwatora (IObserver, IObservable). W tym wpisie zobaczymy pierwszy przykład kodu wykorzystującego RX. Jak wspominałem wcześniej, w .NET 4.0 jest wbudowane pewne wsparcie dla IObserver i IObservable. Jednak są to tylko definicje wspomnianych interfejsów, aby wykorzystać pełne możliwości RX, trzeba je zainstalować i dołączyć do projektu, w...
Programowanie rozproszone 4079 dni, 19 godzin, 33 minuty temu 70 źrodło rozwiń
Wysyłam świeżo ukończoną aplikację do Marketplace. Niecierpliwie oczekuję na zakończenie procesu certyfikacji. Otrzymuję maila zatytułowanego „Windows Phone Marketplace submission notification”. Tak! To jest wiadomość od Mircosoftu! Otwieram wiadomość i pośpiesznie szukam napisu „Congratulations!”, ale… nie ma! Zamiast tego „We were unable to cert..."...
Mobile development 4079 dni, 19 godzin, 33 minuty temu 125 źrodło rozwiń
No właśnie, tak naprawdę dlaczego? Dla sławy, pieniędzy, lasek, szybkich samochodów? Sweterków w romby, okularów, flanelowych koszul? Czy może jeszcze z jakichś innych powodów?
Aby móc korzystać z rozszerzeń RX należy najpierw je pobrać i zainstalować. Przed przeczytaniem tego posta, koniecznie należy zapoznać się z interfejsami IObservable oraz IObserver – prezentowałem je w ostatnim wpisie. Po instalacji dodajemy referencję do System.Reactive: RX dodaje metodę ToObservable konwertującą kolekcję do IObservable, interfejsu który wspiera wzorzec obserwator. Napiszmy przykładowy obserwator:class SampleObserver : IObserver
Programowanie rozproszone 4080 dni, 3 godziny, 27 minut temu 115 źrodło rozwiń
Autor: [ten post jest częścią mojego minicyklu o testach, pełna lista postów: tutaj] Po dość długiej przerwie wracam do tematu testów jednostkowych. Kombek zainicjuję krótkim zahaczeniem o mocki, które opisałem w poprzednim poście cyklu. Poruszyć chcę dzisiaj dwie kwestie. Kwestia 1: terminologia Niedawno na blogu Piotra Zielińskiego pojawił się post opisujący różnice pomiędzy terminami określającymi to co ja rozumiem przez "mock". Przypomniało mi to czasy, gdy starałem się zgłębiać definicje skrywając...
Architektura 4080 dni, 3 godziny, 27 minut temu 185 źrodło rozwiń
Z serii: artykuły dla zielonych, może komuś pomoże zrozumieć czym są interfejsy w technologii .NET
W języku c# obiekt, którego zasobami chcemy sami zarządzać, powinien implementować interfejs IDisposable. Sporo osób aby zwolnić zasoby pisze następujący kod:publicclass MyClass : IDisposable { #region IDisposable Memberspublicvoid Dispose() { // zwalnianie zasobow } #endregion } Interfejs niestety wymusza nam tylko implementację metody Dispose. Powyższe rozwiązanie jest zdecydowanie nieprawidłowe. Zanim jednak przejdę do omawia co w kodzie jest niepoprawnego, podam prawidłową ...