【发布时间】:2020-02-02 17:29:12
【问题描述】:
这可能更像是一个设计问题,但我有一个通过命令生成的聚合成员,并且需要能够测试在命令运行的情况下是否生成了事件。
但是,我没有看到任何明显的方法可以在 TestFixture 框架中对事件的一个字段进行 anyString 匹配。
在创建时聚合生成 ID 是“不好的做法”吗?是否应该在聚合之外生成 ID?
@AggregateMember(eventForwardingMode = ForwardMatchingInstances.class)
private List<TimeCardEntry> timeCardEntries = new ArrayList<>();
data class ClockInCommand(@TargetAggregateIdentifier val employeeName: String)
@CommandHandler
public TimeCard(ClockInCommand cmd) {
apply(new ClockInEvent(cmd.getEmployeeName(),
GenericEventMessage.clock.instant(),
UUID.randomUUID().toString()));
@EventSourcingHandler
public void on(ClockInEvent event) {
this.employeeName = event.getEmployeeName();
timeCardEntries.add(new TimeCardEntry(event.getTimeCardEntryId(), event.getTime()));
}
@Data
public class TimeCardEntry {
@EntityId
private final String timeCardEntryId;
private final Instant clockInTime;
private Instant clockOutTime;
@EventSourcingHandler
public void on(ClockOutEvent event) {
this.clockOutTime = event.getTime();
}
private boolean isClockedIn() {
return clockOutTime != null;
}
}
@ParameterizedTest
@MethodSource(value = "randomEmployeeName")
void testClockInCommand(String employeeName) {
testFixture.givenNoPriorActivity()
.when(new ClockInCommand(employeeName))
.expectEvents(new ClockInEvent(employeeName, testFixture.currentTime(), "Any-String-Works"));
}
【问题讨论】:
标签: java domain-driven-design axon