【发布时间】:2012-04-18 20:10:05
【问题描述】:
我正在尝试在测试之前运行一些初始化代码。我试过suggestions in other questions,但它似乎不起作用。我的领域模型通过以下类引发事件:
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;
}
}
}
出于测试目的,我想在静态列表中捕获这些事件。这样做的最佳方法是什么?
更新
问题是由运行测试的顺序引起的(正如 Alexander 在下面指出的,不能保证)。在我的一个规范中,我注册了一个模拟事件发布者。规范经常以不同的顺序运行的事实意味着 a) 一开始我不知道我有问题(“问题”规范总是最后运行)和 b) 一旦我开始遇到问题,失败的测试在运行之间通常会有所不同(使其更加混乱)。
经验教训 - 在每个上下文运行后清理所有静态资源。你可以通过实现ICleanupAfterEveryContextInAssembly来做到这一点。
【问题讨论】:
-
您是否养成了使用保留字作为变量名的习惯?可能不是一个好主意。
-
并非如此。虽然我过去从未遇到过任何问题。