【发布时间】:2012-04-09 13:33:57
【问题描述】:
我正在将 TDD 应用于我的第一个以事件为中心的项目(CQRS、事件溯源等),并且我正在根据 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 集合的重新排序实际上是正确进行的?当聚合根没有公共 getter/setter 时,我该怎么做。我可以添加一种方法来检索特定索引处的组,但这种破坏性封装不是为了可测试吗?
解决这个问题的正确方法是什么?
编辑
组的重新排序发生在聚合根的 GroupMoved 处理程序中。
private void Apply(GroupMoved e)
{
var moved = groups[e.From];
groups.RemoveAt(e.From);
groups.Insert(e.To, moved);
}
【问题讨论】:
标签: unit-testing tdd cqrs event-sourcing