T
- The type of Aggregate tested in this Fixturepublic class AggregateTestFixture<T> extends Object implements FixtureConfiguration<T>, TestExecutor<T>
FixtureConfiguration
.Constructor and Description |
---|
AggregateTestFixture(Class<T> aggregateType)
Initializes a new given-when-then style test fixture for the given
aggregateType . |
Modifier and Type | Method and Description |
---|---|
TestExecutor<T> |
andGiven(List<?> domainEvents)
Configures the given
domainEvents as the "given" events. |
TestExecutor<T> |
andGiven(Object... domainEvents)
Configures the given
domainEvents as the "given" events. |
TestExecutor<T> |
andGivenCommands(List<?> commands)
Configures the given
commands as the command that will provide the "given" events. |
TestExecutor<T> |
andGivenCommands(Object... commands)
Configures the given
commands as the command that will provide the "given" events. |
TestExecutor<T> |
andGivenCurrentTime(Instant currentTime)
Use this method to indicate a specific moment as the initial current time "known" by the fixture at the start
of the given state.
|
ResultValidator |
andThenTimeAdvancesTo(Instant newDateTime)
Simulates time shifts in the current given state.
|
ResultValidator |
andThenTimeElapses(Duration elapsedTime)
Simulates time shifts in the current given state.
|
Instant |
currentTime()
Returns the time as "known" by the fixture.
|
CommandBus |
getCommandBus()
Returns the command bus used by this fixture.
|
EventBus |
getEventBus()
Returns the event bus used by this fixture.
|
EventStore |
getEventStore()
Returns the event store used by this fixture.
|
Repository<T> |
getRepository()
Returns the repository used by this fixture.
|
TestExecutor<T> |
given(List<?> domainEvents)
Configures the given
domainEvents as the "given" events. |
TestExecutor<T> |
given(Object... domainEvents)
Configures the given
domainEvents as the "given" events. |
TestExecutor<T> |
givenCommands(List<?> commands)
Configures the given
commands as the command that will provide the "given" events. |
TestExecutor<T> |
givenCommands(Object... commands)
Configures the given
commands as the command that will provide the "given" events. |
TestExecutor<T> |
givenNoPriorActivity()
Indicates that no relevant activity has occurred in the past.
|
TestExecutor<T> |
givenState(Supplier<T> aggregate)
Sets the aggregate instance as supplied by given
aggregateState as the initial state for a test case. |
protected void |
handleDeadline(ScopeDescriptor aggregateDescriptor,
DeadlineMessage<?> deadlineMessage)
Handles the given
deadlineMessage in the aggregate described by the given aggregateDescriptor . |
FixtureConfiguration<T> |
registerAggregateFactory(AggregateFactory<T> aggregateFactory)
Registers the given
aggregateFactory with the fixture. |
FixtureConfiguration<T> |
registerAnnotatedCommandHandler(Object annotatedCommandHandler)
Registers an
annotatedCommandHandler with this fixture. |
FixtureConfiguration<T> |
registerCommandDispatchInterceptor(MessageDispatchInterceptor<CommandMessage<?>> commandDispatchInterceptor)
Register a command dispatch interceptor which will always be invoked before a command is dispatched on the
command bus to perform a task specified in the interceptor.
|
FixtureConfiguration<T> |
registerCommandHandler(Class<?> payloadType,
MessageHandler<CommandMessage<?>> commandHandler)
Registers a
commandHandler to handle commands of the given commandType with the
command bus used by this fixture. |
FixtureConfiguration<T> |
registerCommandHandler(String commandName,
MessageHandler<CommandMessage<?>> commandHandler)
Registers a
commandHandler to handle commands of the given commandType with the
command bus used by this fixture. |
FixtureConfiguration<T> |
registerCommandHandlerInterceptor(MessageHandlerInterceptor<CommandMessage<?>> commandHandlerInterceptor)
Register a command handler interceptor which may be invoked before or after the command has been dispatched on
the command bus to perform a task specified in the interceptor.
|
FixtureConfiguration<T> |
registerDeadlineDispatchInterceptor(MessageDispatchInterceptor<DeadlineMessage<?>> deadlineDispatchInterceptor)
Registers a deadline dispatch interceptor which will always be invoked before a deadline is dispatched
(scheduled) on the
DeadlineManager to perform a task specified in the
interceptor. |
FixtureConfiguration<T> |
registerDeadlineHandlerInterceptor(MessageHandlerInterceptor<DeadlineMessage<?>> deadlineHandlerInterceptor)
Registers a deadline handler interceptor which will always be invoked before a deadline is handled to perform a
task specified in the interceptor.
|
FixtureConfiguration<T> |
registerFieldFilter(FieldFilter fieldFilter)
Registers the given
fieldFilter , which is used to define which Fields are used when comparing objects. |
FixtureConfiguration<T> |
registerHandlerDefinition(HandlerDefinition handlerDefinition)
Registers handler definition within this fixture.
|
FixtureConfiguration<T> |
registerIgnoredField(Class<?> declaringClass,
String fieldName)
Indicates that a field with given
fieldName , which is declared in given declaringClass
is ignored when performing deep equality checks. |
FixtureConfiguration<T> |
registerInjectableResource(Object resource)
Registers a resource that is eligible for injection in handler method (e.g.
|
FixtureConfiguration<T> |
registerRepository(Repository<T> repository)
Registers an arbitrary
repository with the fixture. |
FixtureConfiguration<T> |
registerRepositoryProvider(RepositoryProvider repositoryProvider)
Registers repository provider with the fixture.
|
void |
setReportIllegalStateChange(boolean reportIllegalStateChange)
Sets whether or not the fixture should detect and report state changes that occur outside of Event Handler
methods.
|
ResultValidator<T> |
when(Object command)
Dispatches the given command to the appropriate command handler and records all activity in the fixture for
result validation.
|
ResultValidator<T> |
when(Object command,
Map<String,?> metaData)
Dispatches the given command and meta data to the appropriate command handler and records all
activity in the fixture for result validation.
|
public FixtureConfiguration<T> registerRepository(Repository<T> repository)
FixtureConfiguration
repository
with the fixture. The repository must be wired
with the Event Store of this test fixture.
Should not be used in combination with FixtureConfiguration.registerAggregateFactory(org.axonframework.eventsourcing.AggregateFactory)
, as that will overwrite any
repository previously registered.registerRepository
in interface FixtureConfiguration<T>
repository
- The repository to use in the test casepublic FixtureConfiguration<T> registerRepositoryProvider(RepositoryProvider repositoryProvider)
FixtureConfiguration
registerRepositoryProvider
in interface FixtureConfiguration<T>
repositoryProvider
- provides repositories for specified aggregate typespublic FixtureConfiguration<T> registerAggregateFactory(AggregateFactory<T> aggregateFactory)
FixtureConfiguration
aggregateFactory
with the fixture. The repository used by the fixture will use
the given factory to create new aggregate instances. Defaults to an Aggregate Factory that uses the no-arg
constructor to create new instances.
Should not be used in combination with FixtureConfiguration.registerRepository(Repository)
, as that will overwrite any aggregate factory previously registered.registerAggregateFactory
in interface FixtureConfiguration<T>
aggregateFactory
- The Aggregate Factory to create empty aggregates withpublic FixtureConfiguration<T> registerAnnotatedCommandHandler(Object annotatedCommandHandler)
FixtureConfiguration
annotatedCommandHandler
with this fixture. This will register this command handler
with the command bus used in this fixture.registerAnnotatedCommandHandler
in interface FixtureConfiguration<T>
annotatedCommandHandler
- The command handler to register for this testpublic FixtureConfiguration<T> registerCommandHandler(Class<?> payloadType, MessageHandler<CommandMessage<?>> commandHandler)
FixtureConfiguration
commandHandler
to handle commands of the given commandType
with the
command bus used by this fixture.registerCommandHandler
in interface FixtureConfiguration<T>
payloadType
- The type of command to register the handler forcommandHandler
- The handler to registerpublic FixtureConfiguration<T> registerCommandHandler(String commandName, MessageHandler<CommandMessage<?>> commandHandler)
FixtureConfiguration
commandHandler
to handle commands of the given commandType
with the
command bus used by this fixture.registerCommandHandler
in interface FixtureConfiguration<T>
commandName
- The name of the command to register the handler forcommandHandler
- The handler to registerpublic FixtureConfiguration<T> registerInjectableResource(Object resource)
FixtureConfiguration
@CommandHandler
, @EventSourcingHandler
and @EventHandler
. These resource must be
registered before registering any command handler.registerInjectableResource
in interface FixtureConfiguration<T>
resource
- The resource eligible for injectionpublic FixtureConfiguration<T> registerCommandDispatchInterceptor(MessageDispatchInterceptor<CommandMessage<?>> commandDispatchInterceptor)
FixtureConfiguration
MetaData
or throwing an exception based on the command.registerCommandDispatchInterceptor
in interface FixtureConfiguration<T>
commandDispatchInterceptor
- the command dispatch interceptor to be added to the commandbuspublic FixtureConfiguration<T> registerCommandHandlerInterceptor(MessageHandlerInterceptor<CommandMessage<?>> commandHandlerInterceptor)
FixtureConfiguration
registerCommandHandlerInterceptor
in interface FixtureConfiguration<T>
commandHandlerInterceptor
- the command handler interceptor to be added to the commandbuspublic FixtureConfiguration<T> registerDeadlineDispatchInterceptor(MessageDispatchInterceptor<DeadlineMessage<?>> deadlineDispatchInterceptor)
FixtureConfiguration
DeadlineManager
to perform a task specified in the
interceptor.registerDeadlineDispatchInterceptor
in interface FixtureConfiguration<T>
deadlineDispatchInterceptor
- the interceptor for dispatching (scheduling) deadlinespublic FixtureConfiguration<T> registerDeadlineHandlerInterceptor(MessageHandlerInterceptor<DeadlineMessage<?>> deadlineHandlerInterceptor)
FixtureConfiguration
registerDeadlineHandlerInterceptor
in interface FixtureConfiguration<T>
deadlineHandlerInterceptor
- the interceptor for handling deadlinespublic FixtureConfiguration<T> registerFieldFilter(FieldFilter fieldFilter)
FixtureConfiguration
fieldFilter
, which is used to define which Fields are used when comparing objects.
The ResultValidator.expectEvents(Object...)
and ResultValidator.expectResultMessagePayload(Object)
,
for example, use this filter.
When multiple filters are registered, a Field must be accepted by all registered filters in order to be
accepted.
By default, all Fields are included in the comparison.registerFieldFilter
in interface FixtureConfiguration<T>
fieldFilter
- The FieldFilter that defines which fields to include in the comparisonpublic FixtureConfiguration<T> registerIgnoredField(Class<?> declaringClass, String fieldName)
FixtureConfiguration
fieldName
, which is declared in given declaringClass
is ignored when performing deep equality checks.registerIgnoredField
in interface FixtureConfiguration<T>
declaringClass
- The class declaring the fieldfieldName
- The name of the fieldpublic FixtureConfiguration<T> registerHandlerDefinition(HandlerDefinition handlerDefinition)
FixtureConfiguration
handlerDefinition
will replace existing one within
this fixture.registerHandlerDefinition
in interface FixtureConfiguration<T>
handlerDefinition
- used to create concrete handlerspublic TestExecutor<T> given(Object... domainEvents)
FixtureConfiguration
domainEvents
as the "given" events. These are the events returned by the event
store when an aggregate is loaded.
If an item in the given domainEvents
implements Message
, the
payload and meta data from that message are copied into a newly created Domain Event Message. Otherwise, a
Domain Event Message with the item as payload and empty meta data is created.given
in interface FixtureConfiguration<T>
domainEvents
- the domain events the event store should returnpublic TestExecutor<T> andGiven(Object... domainEvents)
TestExecutor
domainEvents
as the "given" events. These are the events returned by the event
store when an aggregate is loaded.
If an item in the given domainEvents
implements Message
, the
payload and meta data from that message are copied into a newly created Domain Event Message. Otherwise, a
Domain Event Message with the item as payload and empty meta data is created.andGiven
in interface TestExecutor<T>
domainEvents
- the domain events the event store should returnpublic TestExecutor<T> givenNoPriorActivity()
FixtureConfiguration
FixtureConfiguration.given(java.util.List)
method.givenNoPriorActivity
in interface FixtureConfiguration<T>
public TestExecutor<T> givenState(Supplier<T> aggregate)
FixtureConfiguration
aggregateState
as the initial state for a test case.
Note that usage of this method is highly discouraged for event sourced aggregates. In that case, use
FixtureConfiguration.given(Object...)
to specify historic events.
givenState
in interface FixtureConfiguration<T>
aggregate
- a supplier providing the state to use as starting point for this fixture.public TestExecutor<T> given(List<?> domainEvents)
FixtureConfiguration
domainEvents
as the "given" events. These are the events returned by the event
store when an aggregate is loaded.
If an item in the list implements Message
, the payload and meta data from that
message are copied into a newly created Domain Event Message. Otherwise, a Domain Event Message with the item
as payload and empty meta data is created.given
in interface FixtureConfiguration<T>
domainEvents
- the domain events the event store should returnpublic TestExecutor<T> andGiven(List<?> domainEvents)
TestExecutor
domainEvents
as the "given" events. These are the events returned by the event
store when an aggregate is loaded.
If an item in the list implements Message
, the payload and meta data from that
message are copied into a newly created Domain Event Message. Otherwise, a Domain Event Message with the item
as payload and empty meta data is created.andGiven
in interface TestExecutor<T>
domainEvents
- the domain events the event store should returnpublic TestExecutor<T> givenCommands(Object... commands)
FixtureConfiguration
commands
as the command that will provide the "given" events. The commands are
executed, and the resulting stored events are captured.givenCommands
in interface FixtureConfiguration<T>
commands
- the domain events the event store should returnpublic TestExecutor<T> andGivenCommands(Object... commands)
TestExecutor
commands
as the command that will provide the "given" events. The commands are
executed, and the resulting stored events are captured.andGivenCommands
in interface TestExecutor<T>
commands
- the domain events the event store should returnpublic TestExecutor<T> givenCommands(List<?> commands)
FixtureConfiguration
commands
as the command that will provide the "given" events. The commands are
executed, and the resulting stored events are captured.givenCommands
in interface FixtureConfiguration<T>
commands
- the domain events the event store should returnpublic TestExecutor<T> andGivenCommands(List<?> commands)
TestExecutor
commands
as the command that will provide the "given" events. The commands are
executed, and the resulting stored events are captured.andGivenCommands
in interface TestExecutor<T>
commands
- the domain events the event store should returnpublic TestExecutor<T> andGivenCurrentTime(Instant currentTime)
TestExecutor
andGivenCurrentTime
in interface TestExecutor<T>
currentTime
- The simulated "current time" at which the given state is initializedpublic Instant currentTime()
TestExecutor
currentTime
in interface TestExecutor<T>
public ResultValidator andThenTimeElapses(Duration elapsedTime)
TestExecutor
andThenTimeElapses
in interface TestExecutor<T>
elapsedTime
- The amount of time that will elapsepublic ResultValidator andThenTimeAdvancesTo(Instant newDateTime)
TestExecutor
andThenTimeAdvancesTo
in interface TestExecutor<T>
newDateTime
- The time to advance the clock topublic ResultValidator<T> when(Object command)
TestExecutor
command
is a CommandMessage
instance, it will be dispatched as-is. Any other object will
cause the given command
to be wrapped in a CommandMessage
as its payload.when
in interface TestExecutor<T>
command
- The command to executepublic ResultValidator<T> when(Object command, Map<String,?> metaData)
TestExecutor
command
is a CommandMessage
instance, it will be dispatched as-is, with given
additional metaData
. Any other object will cause the given command
to be wrapped in a
CommandMessage
as its payload.when
in interface TestExecutor<T>
command
- The command to executemetaData
- The meta data to attach to theprotected void handleDeadline(ScopeDescriptor aggregateDescriptor, DeadlineMessage<?> deadlineMessage) throws Exception
deadlineMessage
in the aggregate described by the given aggregateDescriptor
.
Deadline message is handled in the scope of a UnitOfWork
. If handling the deadline results in an
exception, the exception will be wrapped in a FixtureExecutionException
.aggregateDescriptor
- A ScopeDescriptor
describing the aggregate under testdeadlineMessage
- The DeadlineMessage
to be handledException
public void setReportIllegalStateChange(boolean reportIllegalStateChange)
FixtureConfiguration
setReportIllegalStateChange
in interface FixtureConfiguration<T>
reportIllegalStateChange
- whether or not to detect and report state changes outside of Event Handler
methods.public CommandBus getCommandBus()
FixtureConfiguration
getCommandBus
in interface FixtureConfiguration<T>
public EventBus getEventBus()
FixtureConfiguration
ResultValidator
operations.getEventBus
in interface FixtureConfiguration<T>
public EventStore getEventStore()
FixtureConfiguration
getEventStore
in interface FixtureConfiguration<T>
public Repository<T> getRepository()
FixtureConfiguration
getRepository
in interface FixtureConfiguration<T>
Copyright © 2010–2018. All rights reserved.