テストの前に初期化コードを実行しようとしています。他の質問で提案を試しましたが、うまくいかないようです。私のドメインモデルは、次のクラスを介してイベントを発生させます。
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が以下で指摘しているように、これは保証されていません)。私の仕様の1つで、模擬イベントの発行元を登録しました。仕様が異なる順序で実行されることが多いという事実は、a)そもそも問題が発生したことを知らなかった(「問題」仕様は常に最後に実行された)こと、およびb)問題が発生し始めたら、テストの失敗は、実行ごとに異なることがよくあります(さらに混乱します)。
学んだ教訓-各コンテキストの実行後に静的リソースをクリーンアップします。これを行うには、を実装しICleanupAfterEveryContextInAssembly
ます。