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?
Czy mógłbyś opublikować kod - swoich handlerów, jak wysyłasz etc ...? – Alex
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