Я пытаюсь запустить код инициализации перед тестом. Я пробовал предложения по другим вопросам, но это не работает. Моя модель предметной области вызывает события через следующий класс:
public static class DomainEvents
{
private static readonly object @lock = new object();
private static Action<IDomainEvent> raiseEvent;
public static void Raise<TEvent>(TEvent @event) where TEvent : class, IDomainEvent
{
// omitted for brevity
}
public static void RegisterEventPublisher(Action<IDomainEvent> eventPublisher)
{
lock (@lock)
{
raiseEvent = eventPublisher;
}
}
}
В целях тестирования я хотел бы зафиксировать эти события в статическом списке. Как лучше всего это сделать?
Обновлять
Проблема была вызвана порядком выполнения тестов (что, как указывает Александр ниже, не гарантируется). В одной из своих спецификаций я зарегистрировал фиктивного издателя событий. Тот факт, что спецификация часто запускалась в разном порядке, означал, что а) сначала я не знал, что у меня есть проблема («проблемная» спецификация всегда выполнялась последней) и б) как только у меня возникла проблема, количество неудачные тесты часто различались между запусками (что еще больше запутывало).
Усвоенный урок — очищайте все статические ресурсы после запуска каждого контекста. Вы можете сделать это, реализовав ICleanupAfterEveryContextInAssembly
.