2016-07-10 22 views
5

Właśnie rozpocząłem testowanie MediatR, aby oczyścić nasze ciężkie kontrolery WWW. Wdrożenie tej funkcjonalności nie jest wcale trudne, ale mam problemy z testowaniem.Jak testować z MediatR

Zacząłem od metody kontrolera do anulowania zamówienia.

Gdy zamówienie zostanie anulowane, my gdzie

  • Ustawienie „anulowany” flagę na danych w bazie
  • Logging którzy anulowane spotkanie w dzienniku kontroli
  • Wysłanie powiadomienia przez e-mail do jakiegoś przełożonego.

Wszystko to zostało wyzwolone w sposobie kontrolera, uzależniając sterownik od kilku różnych usług. Podczas testowania musieliśmy wyśmiać każdą część, aby wyizolować zachowanie, które chcieliśmy przetestować.

Sposób, w jaki zaimplementowałem to z MediatR, miał na celu wyemitowanie CancelOrder -query z metody kontrolera. Zrobiłem wtedy CancelOrderHandler, który jest odpowiedzialny za przechowywanie flagi "cancelled".

Stosując niestandardową implementację , emituję powiadomienie OrderCancelled, jeśli CancelOrderHandler nie generuje żadnych wyjątków.

Mam dwie procedury obsługi dla tego powiadomienia: OrderCancelledAuditLogHandler i OrderCancelledNotificationHandler. Pierwszy zajmie się dziennikiem kontroli, a drugi wyśle ​​powiadomienia.

Każdy handler jest łatwy do przetestowania. Ale jak mogę sprawdzić, czy wszystko jest w porządku? Chcę się upewnić, że po anulowaniu zamówienia, dziennik kontroli i powiadomienie są w rzeczywistości załatwiane. Wszystkie programy obsługi wykonują rzeczy, których naprawdę nie chcę podczas wykonywania testu (zapisy w bazie danych i wysyłanie wiadomości e-mail) i nie jestem zainteresowany pełnym testem integracji od początku do końca.

Wszelkie pomysły?

+0

Czy mógłbyś opublikować kod - swoich handlerów, jak wysyłasz etc ...? – Alex

+0

Nic ciekawego, myślę, że ... Podążałem za wzorami z [blogu Bogardsa] (https://lostechies.com/jimmybogard/2014/09/09/tackling-cross-cutting-concerns-with-a -mediator-pipeline /) i używa kontenera IoC do dekorowania wszystkich 'IRequestHandler <> w celu wysyłania zdarzeń po zdarzeniu. – Vegar

Odpowiedz

1

Mam do czynienia z tym samym problemem. Skłaniam się do testowania każdego z komponentów, które są używane w programie obsługi osobno, a następnie budowania go, w jakiś sposób jeszcze nie w 100%, gdzie testuję żądania i procedury obsługi w taki sam sposób, w jaki Pan Bogard wykonał testy dla projekt Mediatr na GitHub

+0

Zastanawiam się nad budowaniem "wykresu komunikatów" za pomocą specjalnych programów obsługi "po zgłoszeniu" i pewnego rodzaju "przekaźnika wiadomości". Tak więc program obsługi może być oznaczony jako moduł obsługi zgłoszeń po powiadomieniu (np. Program obsługi po zdarzeniu), a taki program obsługi może zostać zaimplementowany jako program obsługi "wyślij inną wiadomość". Mam nadzieję, że uda mi się zbudować "łańcuch" handlerów w oparciu o klasy znalezione przez ioc, a następnie je potwierdzić. Myślę, że będzie to lepsze niż faktyczne wykonanie łańcucha. – Vegar