We’ve been using Udi Dahan’s excellent Domain Events pattern in a project at work. It’s best to keep them as coarse-grained as possible, but we have already identified a dozen or so events that need to be raised by the domain and processed by our services layer.
Naturally, however, I am forgetting to register some of the event handlers in our IoC container. So, as before with our domain services, I decided to write some integration tests to check everything is set up properly. This is very simple to achieve using NUnit’s trusty parameterized tests, ServiceLocator and a sprinkling of generics:
IEnumerable<Type> GetDomainEvents()
{
var domain = Assembly.GetAssembly(typeof(Employee));
return domain.GetTypes()
.Where(typeof(IDomainEvent).IsAssignableFrom)
.Where(t => !t.Equals(typeof(IDomainEvent)));
}
[Test]
public void Should_be_able_to_resolve_handlers_for_domain_event(
[ValueSource("GetDomainEvents")]Type @event)
{
var handler = typeof (IHandles<>).MakeGenericType(@event);
ServiceLocator.Current.GetAllInstances(handler).Should().Not.Be.Empty();
}
This reveals a nice todo list of all the handlers we haven’t implemented yet. And the ones I forgot to register!



