Używam Microsoft testowanej jednostki i są następujące:Unit Testing obiekt, którego żywotność zakres jest obsługiwane przez IoC kontenera
public class AccountCommandHandlers :
Handler<CreateAccountCommand>,
Handler<CloseAccountCommand>
{
public bool CreateAccountCommandWasCalled = false;
public bool CloseAccountCommandWasCalled = false;
public void Handle(CreateAccountCommand command)
{
CreateAccountCommandWasCalled = true;
}
public void Handle(CloseAccountCommand command)
{
CloseAccountCommandWasCalled = true;
}
}
[TestMethod]
public void CanRaiseInternalHandlers()
{
var iocContainer = SimpleInjectorWiringForMembus.Instance;
iocContainer.Bootstrap(
AppDomain.CurrentDomain.GetAssemblies());
var membus = MembusWiring.Instance;
membus.Bootstrap();
membus.Bus.Publish(new CreateAccountCommand() { Id = 100 });
membus.Bus.Publish(new CloseAccountCommand() { Id = 100 });
}
Używam kontenera IoC (Simple wtryskiwacza), która obsługuje zakres dożywotnią obiektów. Membus przekazuje polecenia do programów obsługi komend i rozwiązuje je za pośrednictwem kontenera IoC.
Powyższy kod działa i działa, a procedury obsługi komend ustawiają zmienne lokalne na true.
Ponieważ jednak Simple Injector obsługuje zakres życia, nie mogę prosić o Simple Injector dla obiektu AccountCommandHandler
, ponieważ zwróciłby nowy obiekt z CreateAccountCommandWasCalled
ustawionym na false.
Będąc nowicjuszem w jednostce Testowanie, co byłoby bardziej niezawodnym sposobem testowania niż ustawienie CreateAccountCommandWasCalled
jako zmiennej statycznej?
OK, ta odpowiedź jest bardziej podobna do wielkiej krytyki dotyczącej testów jednostkowych niż odpowiedzi na bardzo konkretne pytanie, przepraszam! Mam nadzieję, że ktoś kiedyś okaże się przydatny :) – GrahamMc
Zgadzam się z tym, co tu mówisz, ale mam wrażenie, że OP faktycznie pisze test integracji, aby sprawdzić, czy system będzie działał poprawnie. W tych niewielu przypadkach warto przetestować infrastrukturę, w tym kontener IoC i Membus. Prawdopodobnie powinieneś mieć kilka takich testów, ale mimo to testy te są ważne. – Steven
@Steven zgodził się! – GrahamMc