如何在测试轴突的过程中调用@EventHandler



我有以下流程:

@CommandHandler
public PaymentsAggregate(RegisterPaymentCommand command){...}
@EventSourcingHandler
public void on(PaymentRegisteredEvent event){...}
@EventHandler
public void on(PaymentRegisteredEvent event){
paymentRepository.save(event.getPayment());
if(someCondition)
commandGateway.send(new ReturnPaymentCommand(...));
}
@CommandHandler
public void handle(ReturnPaymentCommand command){...}
@EventSourcingHandler
public void on(PaymentReturnedEvent event){...}
@EventHandler
public void on(PaymentReturnedEvent event){...}

我想测试我的RegisterPaymentCommand,有时它会触发ReturnPaymentCommand。所以,在我的expectEvents中,我有PaymentRegisteredEventPaymentReturnedEvent。但我意识到PaymentRegisteredEvent@EventSourcingHandler方法在测试时从未被激发,因此ReturnPaymentCommand从未被调用。

我能做什么,或者我做错了什么?

我相信您混淆了两种类型的测试。

  1. 骨料试验

对于这种类型的测试,Axon Framework提供了AggregateTestFixture来帮助您。正如您可能已经在做的那样,这些测试是给定/何时/然后的形式,并且应该验证命令和事件流是否是正确的和预期的。

例如:

aggregateFixture.given(new AnyEvent())
.when(new AnyCommand())
.expectEvents(new ExpectedEvent());

expectExceptionexpectNoEvents

  1. 消息处理程序组件测试

该组件应该像任何其他组件一样进行单元测试。为此,您可以简单地模拟您需要的任何东西(通常是您的存储库(,并在调用给定组件的方法时测试您是否执行了需要执行的操作(例如保存/更新/删除条目(

例如:

@Test
void testAnyEventHandlerMethod() {
messageHandler.on(new AnyEvent());
verify(myMockedRepository).save(entityDerivedFromEvent());
}

最新更新