Jak*_*cki 2 unit-testing cqrs event-sourcing event-store commondomain
我有一个使用Jonathan Oliver的CommonDomain和EventStore的小系统.
我如何对我的聚合根进行单元测试以验证是否引发了正确的事件?
考虑遵循聚合根:
public class Subscriber : AggregateBase
{
private Subscriber(Guid id)
{
this.Id = id;
}
private Subscriber(Guid id, string email, DateTimeOffset registeredDate)
: this(id)
{
this.RaiseEvent(new NewSubscriberRegistered(this.Id, email, registeredDate));
}
public string Email{ get; private set; }
public DateTimeOffset RegisteredDate { get; private set; }
public static Subscriber Create(Guid id, string email, DateTimeOffset registeredDate)
{
return new Subscriber(id, email, registeredDate);
}
private void Apply(NewSubscriberRegistered @event)
{
this.Email = @event.Email;
this.RegisteredDate = @event.RegisteredDate;
}
}
Run Code Online (Sandbox Code Playgroud)
我想写下面的测试:
// Arrange
var id = Guid.NewGuid();
var email = "test@thelightfull.com";
var registeredDate = DateTimeOffset.Now;
// Act
var subscriber = Subscriber.Create(id, email, registeredDate);
// Assert
var eventsRaised = subscriber.GetEvents(); <---- How to get the events?
// Assert that NewSubscriberRegistered event was raised with valid data
Run Code Online (Sandbox Code Playgroud)
我可以使用内存持久性和同步调度程序设置整个EventStore,挂起模拟事件处理程序并存储任何已发布的事件以进行验证,但它似乎有点过分.
IRouteEventsCommonDomain中有一个接口.看起来我可以嘲笑它直接从事件中获取事件,AggregateBase但我怎么能将它传递给我的Subscriber班级呢?我不想用测试相关代码"污染"我的多米安.
我发现AggregateBase显式实现了IAggregate接口,它暴露了ICollection GetUncommittedEvents();方法.
所以单元测试看起来像这样:
var eventsRaised = ((IAggregate)subscriber).GetUncommittedEvents();
并且不需要依赖EventStore.
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |