Zaznacz stronę

Moq w Universal Apps? Zapomnij!

utworzone przez | lis 17, 2015 | .NET, C#, TDD, Universal App | 4 Komentarze

Jeżeli chcielibyście w projekcie Universal App tworzyć testy jednostkowe to po pierwsze oprócz MSTest niczego innego nie użyjecie.
Jeżeli chcielibyście użyć znanego Wam framework do moqowania obiektów, zapomnijcie.

Do takich konkluzji doszedłem podczas mojej kolejnej “zabawy” z projektem, który mam w głowie i powoli przenoszę go do świata żywego (nie ważne)

Ale po kolei. Ważną rzeczą, na którą musicie zwrócić uwagę przy dodawaniu projektu unit test do to wybranie Unit Test App (Universal Windows)

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!172607″]

Trochę się zdziwiłem, że w wygenerowanych plikach do unit testów zobaczyłem xaml’a 🙂

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!172608″]

No cóż… do różnych dziwnych rzeczy jestem przyzwyczajony

Pierwsze co chciałem zrobić to dodać nUnit do projektu, który z nugeta bez najmniejszego problemu dodałem. Piszę na szybko pierwszy test

Uruchamiam testy z Resharpera i za chwilę pokazuje mi się takie coś

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!172609″]

Kto tu jest nieprzekonywujący? Ja czy mój test? 😀
Przeszukałem, przegrzebałem Internet 3 razy i znalazłem odpowiedź. Odpuściłem. Nie będę walić głową w mur. Jest MSTest, z którego też mogę korzystać.

Szybka zmiana atrybutów w mojej testowej klasie

I wynik już całkowicie inny

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!172613″]

Super!
Więc kolejną rzeczą jaką chciałem dodać to Moq. Włączam nuget, szukam, instaluje i dostaję coś takiego

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!172614″]

Natomiast w output czytam, że moq nie jest kompatybilny z UAP w wersji 10

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!172615″]

Zajebiście… Zacząłem znowu grzebać i wygrzebałem kilka rzeczy. Po pierwsze na stronach uservoice jest prośba o dodanie moq’ów do Universal Apps… czyli jesteśmy w czarnej d..pie!
Ale podczas szukania znalazłem jedną rzecz. Sugestia aby użyć DispatchProxy.

Przyglądnąłem się temu co Microsoft zamieścił na github i zacząłem to rozwiązanie implementować w swoim projekcie.
Na samym początku potrzebna jest klasa, która dziedziczy po DispatchProxy

Następnie w metodach testowych możemy to wykorzystać między innymi w ten sposób

I o dziwo to działa.
Ale jak dla mnie?
Kolejna porażka Microsoft!

 

Share This
%d bloggers like this: