public class SagaTestFixture<T> extends Object implements FixtureConfiguration, ContinuedGivenState
Constructor and Description |
---|
SagaTestFixture(Class<T> sagaType)
Creates an instance of the AnnotatedSagaTestFixture to test sagas of the given
sagaType . |
Modifier and Type | Method and Description |
---|---|
GivenAggregateEventPublisher |
andThenAggregate(String aggregateIdentifier)
Use this method to indicate that an aggregate with given identifier published certain events.
|
ContinuedGivenState |
andThenAPublished(Object event)
Indicates that the given
event has been published in the past. |
ContinuedGivenState |
andThenAPublished(Object event,
Map<String,?> metaData)
Indicates that the given
event with given metaData has been published in the past. |
ContinuedGivenState |
andThenTimeAdvancesTo(Instant newDateTime)
Simulate time shifts in the current given state.
|
ContinuedGivenState |
andThenTimeElapses(Duration elapsedTime)
Simulate time shifts in the current given state.
|
Instant |
currentTime()
Returns the time as "known" by the fixture.
|
protected void |
ensureSagaResourcesInitialized()
Initializes the saga resources if it hasn't already done so.
|
RecordingCommandBus |
getCommandBus()
Returns the command bus used by this fixture.
|
EventBus |
getEventBus()
Returns the event bus used by this fixture.
|
GivenAggregateEventPublisher |
givenAggregate(String aggregateIdentifier)
Use this method to indicate that an aggregate with given identifier published certain events.
|
ContinuedGivenState |
givenAPublished(Object event)
Indicates that the given
applicationEvent has been published in the past. |
ContinuedGivenState |
givenCurrentTime(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.
|
WhenState |
givenNoPriorActivity()
Indicates that no relevant activity has occurred in the past.
|
protected void |
handleDeadline(ScopeDescriptor sagaDescriptor,
DeadlineMessage<?> deadlineMessage)
Handles the given
deadlineMessage in the saga described by the given sagaDescriptor . |
protected void |
handleInSaga(EventMessage<?> event)
Handles the given
event in the scope of a Unit of Work. |
<I> I |
registerCommandGateway(Class<I> gatewayInterface)
Creates a Command Gateway for the given
gatewayInterface and registers that as a resource. |
<I> I |
registerCommandGateway(Class<I> gatewayInterface,
I stubImplementation)
Creates a Command Gateway for the given
gatewayInterface and registers that as a resource. |
FixtureConfiguration |
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 |
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 |
registerFieldFilter(FieldFilter fieldFilter)
Registers the given
fieldFilter , which is used to define which Fields are used when comparing
objects. |
FixtureConfiguration |
registerHandlerDefinition(HandlerDefinition handlerDefinition)
Registers handler definition within this fixture.
|
FixtureConfiguration |
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. |
void |
registerResource(Object resource)
Registers the given
resource . |
FixtureConfiguration |
registerStartRecordingCallback(Runnable onStartRecordingCallback)
Registers a callback to be invoked when the fixture execution starts recording.
|
void |
setCallbackBehavior(CallbackBehavior callbackBehavior)
Sets the instance that defines the behavior of the Command Bus when a command is dispatched with a callback.
|
WhenAggregateEventPublisher |
whenAggregate(String aggregateIdentifier)
Use this method to indicate that an aggregate with given identifier should publish certain events, while
recording the outcome.
|
FixtureExecutionResult |
whenPublishingA(Object event)
Use this method to indicate an application is published, while recording the outcome.
|
FixtureExecutionResult |
whenPublishingA(Object event,
Map<String,?> metaData)
Use this method to indicate an application is published with given additional
metaData ,
while recording the outcome. |
FixtureExecutionResult |
whenTimeAdvancesTo(Instant newDateTime)
Mimic an elapsed time with no relevant activity for the Saga.
|
FixtureExecutionResult |
whenTimeElapses(Duration elapsedTime)
Mimic an elapsed time with no relevant activity for the Saga.
|
FixtureConfiguration |
withTransienceCheckDisabled()
Disables the check that injected resources are stored in fields that are marked 'transient'.
|
protected void handleInSaga(EventMessage<?> event)
event
in the scope of a Unit of Work. If handling the event results in an exception
the exception will be wrapped in a FixtureExecutionException
.event
- The event message to handleprotected void handleDeadline(ScopeDescriptor sagaDescriptor, DeadlineMessage<?> deadlineMessage) throws Exception
deadlineMessage
in the saga described by the given sagaDescriptor
.
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
.sagaDescriptor
- A ScopeDescriptor
describing the saga under testdeadlineMessage
- The DeadlineMessage
to be handledException
protected void ensureSagaResourcesInitialized()
public FixtureConfiguration withTransienceCheckDisabled()
FixtureConfiguration
By default, Saga fixtures check for the transient modifier on fields that hold injected resources. These resources are generally not means to be serialized as part of the Saga.
When the transience check reports false positives, this method allows this check to be skipped.
withTransienceCheckDisabled
in interface FixtureConfiguration
public FixtureExecutionResult whenTimeElapses(Duration elapsedTime)
WhenState
FixtureConfiguration.registerResource(Object)
, you may need to
reset them yourself if they are manipulated by the Saga in the "given" stage of the test.whenTimeElapses
in interface WhenState
elapsedTime
- The amount of time to elapsepublic FixtureExecutionResult whenTimeAdvancesTo(Instant newDateTime)
WhenState
FixtureConfiguration.registerResource(Object)
, you may need to
reset them yourself if they are manipulated by the Saga in the "given" stage of the test.whenTimeAdvancesTo
in interface WhenState
newDateTime
- The time to advance the clock topublic void registerResource(Object resource)
FixtureConfiguration
resource
. When a Saga is created, all resources are injected on that instance
before any Events are passed onto it.
Note that a CommandBus, EventBus and EventScheduler are already registered as resources, and need not be
registered again.
Also note that you might need to reset the resources manually if you want to isolate behavior during the "when"
stage of the test.registerResource
in interface FixtureConfiguration
resource
- the resource to register.public void setCallbackBehavior(CallbackBehavior callbackBehavior)
FixtureConfiguration
setCallbackBehavior
in interface FixtureConfiguration
callbackBehavior
- The instance deciding to how the callback should be invoked.public GivenAggregateEventPublisher givenAggregate(String aggregateIdentifier)
FixtureConfiguration
andThenAggregate(someIdentifier).published(someEvents)
givenAggregate
in interface FixtureConfiguration
aggregateIdentifier
- The identifier of the aggregate the events should appear to come frompublic ContinuedGivenState givenAPublished(Object event)
FixtureConfiguration
applicationEvent
has been published in the past. This event is sent to the
associated sagas.givenAPublished
in interface FixtureConfiguration
event
- The event to publishpublic ContinuedGivenState givenCurrentTime(Instant currentTime)
FixtureConfiguration
givenCurrentTime
in interface FixtureConfiguration
currentTime
- The simulated "current time" at which the given state is initializedpublic WhenState givenNoPriorActivity()
FixtureConfiguration
givenNoPriorActivity
in interface FixtureConfiguration
public GivenAggregateEventPublisher andThenAggregate(String aggregateIdentifier)
ContinuedGivenState
andThenAggregate(someIdentifier).published(someEvents)
andThenAggregate
in interface ContinuedGivenState
aggregateIdentifier
- The identifier of the aggregate the events should appear to come frompublic ContinuedGivenState andThenTimeElapses(Duration elapsedTime) throws Exception
ContinuedGivenState
andThenTimeElapses
in interface ContinuedGivenState
elapsedTime
- The amount of time that will elapseException
- if an exception happens when the duration elapsespublic ContinuedGivenState andThenTimeAdvancesTo(Instant newDateTime) throws Exception
ContinuedGivenState
andThenTimeAdvancesTo
in interface ContinuedGivenState
newDateTime
- The time to advance the clock toException
- if an exception happens when the time advancespublic ContinuedGivenState andThenAPublished(Object event)
ContinuedGivenState
event
has been published in the past. This event is sent to the associated
sagas.andThenAPublished
in interface ContinuedGivenState
event
- The event to publishpublic ContinuedGivenState andThenAPublished(Object event, Map<String,?> metaData)
ContinuedGivenState
event
with given metaData
has been published in the past. This event is sent to the associated
sagas.andThenAPublished
in interface ContinuedGivenState
event
- The event to publishmetaData
- The meta data to attach to the eventpublic WhenAggregateEventPublisher whenAggregate(String aggregateIdentifier)
WhenState
FixtureConfiguration.givenAggregate(String)
given} and
ContinuedGivenState.andThenAggregate(String)
andThen} methods, this method
will start recording activity on the EventBus and CommandBus.
Can be chained to build natural sentences:whenAggregate(someIdentifier).publishes(anEvent)
Note that if you inject resources using FixtureConfiguration.registerResource(Object)
, you may need to
reset them yourself if they are manipulated by the Saga in the "given" stage of the test.whenAggregate
in interface WhenState
aggregateIdentifier
- The identifier of the aggregate the events should appear to come frompublic FixtureExecutionResult whenPublishingA(Object event)
WhenState
FixtureConfiguration.registerResource(Object)
, you may need to
reset them yourself if they are manipulated by the Saga in the "given" stage of the test.whenPublishingA
in interface WhenState
event
- the event to publishpublic FixtureExecutionResult whenPublishingA(Object event, Map<String,?> metaData)
WhenState
metaData
,
while recording the outcome.
Note that if you inject resources using FixtureConfiguration.registerResource(Object)
, you may need to
reset them yourself if they are manipulated by the Saga in the "given" stage of the test.whenPublishingA
in interface WhenState
event
- the event to publishmetaData
- The meta data to attach to the eventpublic Instant currentTime()
FixtureConfiguration
currentTime
in interface FixtureConfiguration
public <I> I registerCommandGateway(Class<I> gatewayInterface)
FixtureConfiguration
gatewayInterface
and registers that as a resource. The
gateway will dispatch commands on the Command Bus contained in this Fixture, so that you can validate commands
using FixtureExecutionResult.expectDispatchedCommands(Object...)
and FixtureExecutionResult.expectDispatchedCommandsMatching(org.hamcrest.Matcher)
.
Note that you need to use FixtureConfiguration.setCallbackBehavior(org.axonframework.test.utils.CallbackBehavior)
to defined
the behavior of commands when expecting return values. Alternatively, you can use FixtureConfiguration.registerCommandGateway(Class, Object)
to define behavior using a stub implementation.registerCommandGateway
in interface FixtureConfiguration
I
- The gateway typegatewayInterface
- The interface describing the gatewaypublic <I> I registerCommandGateway(Class<I> gatewayInterface, I stubImplementation)
FixtureConfiguration
gatewayInterface
and registers that as a resource. The
gateway will dispatch commands on the Command Bus contained in this Fixture, so that you can validate commands
using FixtureExecutionResult.expectDispatchedCommands(Object...)
and FixtureExecutionResult.expectDispatchedCommandsMatching(org.hamcrest.Matcher)
.
The behavior of the created gateway is defined by the given stubImplementation
, if not null.
Dispatched Commands are still recorded for verification. Note that only commands executed in the "when" phase
are recorded, while the stub implementation may record activity during the "given" phase as well.registerCommandGateway
in interface FixtureConfiguration
I
- The gateway typegatewayInterface
- The interface describing the gatewaystubImplementation
- The stub or mock implementation defining behavior of the gatewaypublic FixtureConfiguration registerFieldFilter(FieldFilter fieldFilter)
FixtureConfiguration
fieldFilter
, which is used to define which Fields are used when comparing
objects. The ResultValidator.expectEvents(Object...)
and
ResultValidator.expectResultMessage(CommandResultMessage)
, 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
fieldFilter
- The FieldFilter that defines which fields to include in the comparisonpublic FixtureConfiguration registerIgnoredField(Class<?> declaringClass, String fieldName)
FixtureConfiguration
fieldName
, which is declared in given declaringClass
is ignored when performing deep equality checks.registerIgnoredField
in interface FixtureConfiguration
declaringClass
- The class declaring the fieldfieldName
- The name of the fieldpublic FixtureConfiguration registerHandlerDefinition(HandlerDefinition handlerDefinition)
FixtureConfiguration
handlerDefinition
will replace existing one within
this fixture.registerHandlerDefinition
in interface FixtureConfiguration
handlerDefinition
- used to create concrete handlerspublic FixtureConfiguration registerDeadlineDispatchInterceptor(MessageDispatchInterceptor<DeadlineMessage<?>> deadlineDispatchInterceptor)
FixtureConfiguration
DeadlineManager
to perform a task specified in the
interceptor.registerDeadlineDispatchInterceptor
in interface FixtureConfiguration
deadlineDispatchInterceptor
- the interceptor for dispatching (scheduling) deadlinespublic FixtureConfiguration registerDeadlineHandlerInterceptor(MessageHandlerInterceptor<DeadlineMessage<?>> deadlineHandlerInterceptor)
FixtureConfiguration
registerDeadlineHandlerInterceptor
in interface FixtureConfiguration
deadlineHandlerInterceptor
- the interceptor for handling deadlinespublic FixtureConfiguration registerStartRecordingCallback(Runnable onStartRecordingCallback)
FixtureConfiguration
registerStartRecordingCallback
in interface FixtureConfiguration
onStartRecordingCallback
- callback to invokepublic EventBus getEventBus()
FixtureConfiguration
ResultValidator
operations.getEventBus
in interface FixtureConfiguration
public RecordingCommandBus getCommandBus()
FixtureConfiguration
getCommandBus
in interface FixtureConfiguration
Copyright © 2010–2019. All rights reserved.