初めてのイベント中心のプロジェクト (CQRS、イベント ソーシングなど) に TDD を適用し、Greg Young の単純なテスト フレームワーク Given, When, Expect に従ってテストを作成しています。私のテスト フィクスチャは、コマンド、コマンド ハンドラ、および集約ルートを受け取り、出力されたイベントをテストします。
CommandTestFixture<TCommand, TCommandHandler, TAggregateRoot>
たとえば、ここに典型的なテストがあります
[TestFixture]
public class When_moving_a_group :
CommandTestFixture<MoveGroup, MoveGroupHandler, Foo>
全体としてこれらのテストには非常に満足していますが、上記のテストで問題が発生しました。集約ルートには、グループのコレクションが含まれています。このコマンドMoveGroup
は、from & to インデックスを取得して、コレクションを並べ替えます。テストをセットアップし、正しいGroupMoved
イベントが正しいデータで生成されたことを確認しました。
追加のテストとして、Groups コレクションの並べ替えが実際に正しく行われたことを確認する必要がありますか? 集約ルートに公開ゲッター/セッターがない場合、これを行うにはどうすればよいですか。特定のインデックスでグループを取得するメソッドを追加することはできますが、このカプセル化の解除は単にテスト可能にするためではありませんか?
これについて正しい方法は何ですか?
編集
グループの並べ替えは、集約ルートの GroupMoved ハンドラーで行われます。
private void Apply(GroupMoved e)
{
var moved = groups[e.From];
groups.RemoveAt(e.From);
groups.Insert(e.To, moved);
}