Interface FixtureConfiguration
- All Known Implementing Classes:
SagaTestFixture
- Since:
- 1.1
- Author:
- Allard Buijze
-
Method Summary
Modifier and TypeMethodDescriptionReturns the time as "known" by the fixture.Returns the command bus used by this fixture.Returns the event bus used by this fixture.givenAggregate(String aggregateIdentifier) Use this method to indicate that an aggregate with given identifier published certain events.givenAPublished(Object event) Indicates that the givenapplicationEventhas been published in the past.givenAPublished(Object event, Map<String, ?> metaData) Indicates that the giveneventwith givenmetaDatahas been published in the past.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.Indicates that no relevant activity has occurred in the past.<T> TregisterCommandGateway(Class<T> gatewayInterface) Creates a Command Gateway for the givengatewayInterfaceand registers that as a resource.<T> TregisterCommandGateway(Class<T> gatewayInterface, T stubImplementation) Creates a Command Gateway for the givengatewayInterfaceand registers that as a resource.registerDeadlineDispatchInterceptor(MessageDispatchInterceptor<? super DeadlineMessage<?>> deadlineDispatchInterceptor) Registers a deadline dispatch interceptor which will always be invoked before a deadline is dispatched (scheduled) on theDeadlineManagerto perform a task specified in the interceptor.registerDeadlineHandlerInterceptor(MessageHandlerInterceptor<? super 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.default FixtureConfigurationregisterEventHandlerInterceptor(MessageHandlerInterceptor<? super EventMessage<?>> eventHandlerInterceptor) Registers aMessageHandlerInterceptorforEventMessages.registerFieldFilter(FieldFilter fieldFilter) Registers the givenfieldFilter, which is used to define which Fields are used when comparing objects.registerHandlerDefinition(HandlerDefinition handlerDefinition) Registers aHandlerDefinitionwithin this fixture.registerHandlerEnhancerDefinition(HandlerEnhancerDefinition handlerEnhancerDefinition) Registers aHandlerEnhancerDefinitionwithin this fixture.registerIgnoredField(Class<?> declaringClass, String fieldName) Indicates that a field with givenfieldName, which is declared in givendeclaringClassis ignored when performing deep equality checks.registerListenerInvocationErrorHandler(ListenerInvocationErrorHandler listenerInvocationErrorHandler) Registers aListenerInvocationErrorHandlerto be set for the Saga to deal with exceptions being thrown from within Saga Event Handlers.registerParameterResolverFactory(ParameterResolverFactory parameterResolverFactory) Registers aParameterResolverFactorywithin this fixture.voidregisterResource(Object resource) Registers the givenresource.registerResourceInjector(ResourceInjector resourceInjector) Registers aResourceInjectorwithin this fixture.registerStartRecordingCallback(Runnable onStartRecordingCallback) Registers a callback to be invoked when the fixture execution starts recording.voidsetCallbackBehavior(CallbackBehavior callbackBehavior) Sets the instance that defines the behavior of the Command Bus when a command is dispatched with a callback.default FixtureConfigurationsuppressExceptionInGivenPhase(boolean suppress) Configure whether the fixture should suppress exceptions thrown during the given-phase.Disables the check that injected resources are stored in fields that are marked 'transient'.
-
Method Details
-
withTransienceCheckDisabled
FixtureConfiguration withTransienceCheckDisabled()Disables the check that injected resources are stored in fields that are marked 'transient'.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.
- Returns:
- this instance for fluent interfacing.
-
registerResource
Registers the givenresource. 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.- Parameters:
resource- the resource to register.
-
registerParameterResolverFactory
FixtureConfiguration registerParameterResolverFactory(ParameterResolverFactory parameterResolverFactory) Registers aParameterResolverFactorywithin this fixture. The givenparameterResolverFactorywill be added to the other parameter resolver factories introduced throughClasspathParameterResolverFactory.forClass(Class)and theSimpleResourceParameterResolverFactoryadding the registered resources (withregisterResource(Object). The type of the saga under test is used as input for theClasspathParameterResolverFactory#forClass(Class)operation.- Parameters:
parameterResolverFactory- theParameterResolverto register within this fixture- Returns:
- the current FixtureConfiguration, for fluent interfacing
- See Also:
-
registerCommandGateway
Creates a Command Gateway for the givengatewayInterfaceand registers that as a resource. The gateway will dispatch commands on the Command Bus contained in this Fixture, so that you can validate commands usingFixtureExecutionResult.expectDispatchedCommands(Object...)andFixtureExecutionResult.expectDispatchedCommandsMatching(org.hamcrest.Matcher). Note that you need to usesetCallbackBehavior(org.axonframework.test.utils.CallbackBehavior)to defined the behavior of commands when expecting return values. Alternatively, you can useregisterCommandGateway(Class, Object)to define behavior using a stub implementation.- Type Parameters:
T- The gateway type- Parameters:
gatewayInterface- The interface describing the gateway- Returns:
- the gateway implementation being registered as a resource.
-
registerCommandGateway
Creates a Command Gateway for the givengatewayInterfaceand registers that as a resource. The gateway will dispatch commands on the Command Bus contained in this Fixture, so that you can validate commands usingFixtureExecutionResult.expectDispatchedCommands(Object...)andFixtureExecutionResult.expectDispatchedCommandsMatching(org.hamcrest.Matcher). The behavior of the created gateway is defined by the givenstubImplementation, 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.- Type Parameters:
T- The gateway type- Parameters:
gatewayInterface- The interface describing the gatewaystubImplementation- The stub or mock implementation defining behavior of the gateway- Returns:
- the gateway implementation being registered as a resource.
-
registerFieldFilter
Registers the givenfieldFilter, which is used to define which Fields are used when comparing objects. TheResultValidator.expectEvents(Object...)andResultValidator.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.- Parameters:
fieldFilter- The FieldFilter that defines which fields to include in the comparison- Returns:
- the current FixtureConfiguration, for fluent interfacing
-
registerIgnoredField
Indicates that a field with givenfieldName, which is declared in givendeclaringClassis ignored when performing deep equality checks.- Parameters:
declaringClass- The class declaring the fieldfieldName- The name of the field- Returns:
- the current FixtureConfiguration, for fluent interfacing
- Throws:
FixtureExecutionException- when no such field is declared
-
registerHandlerDefinition
Registers aHandlerDefinitionwithin this fixture. The givenhandlerDefinitionis added to the handler definitions introduced throughClasspathHandlerDefinition.forClass(Class). The type of the saga under test is used as input for theClasspathHandlerDefinition#forClass(Class)operation.- Parameters:
handlerDefinition- used to create concrete handlers- Returns:
- the current FixtureConfiguration, for fluent interfacing
-
registerHandlerEnhancerDefinition
FixtureConfiguration registerHandlerEnhancerDefinition(HandlerEnhancerDefinition handlerEnhancerDefinition) Registers aHandlerEnhancerDefinitionwithin this fixture. This givenhandlerEnhancerDefinitionis added to the handler enhancer definitions introduced throughClasspathHandlerEnhancerDefinition.forClass(Class). The type of the saga under test is used as input for theClasspathHandlerEnhancerDefinition#forClass(Class)operation.- Parameters:
handlerEnhancerDefinition- theHandlerEnhancerDefinitionto register within this fixture- Returns:
- the current FixtureConfiguration, for fluent interfacing
-
registerDeadlineDispatchInterceptor
FixtureConfiguration registerDeadlineDispatchInterceptor(MessageDispatchInterceptor<? super DeadlineMessage<?>> deadlineDispatchInterceptor) Registers a deadline dispatch interceptor which will always be invoked before a deadline is dispatched (scheduled) on theDeadlineManagerto perform a task specified in the interceptor.- Parameters:
deadlineDispatchInterceptor- the interceptor for dispatching (scheduling) deadlines- Returns:
- the current FixtureConfiguration, for fluent interfacing
-
registerDeadlineHandlerInterceptor
FixtureConfiguration registerDeadlineHandlerInterceptor(MessageHandlerInterceptor<? super 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.- Parameters:
deadlineHandlerInterceptor- the interceptor for handling deadlines- Returns:
- the current FixtureConfiguration, for fluent interfacing
-
registerEventHandlerInterceptor
default FixtureConfiguration registerEventHandlerInterceptor(MessageHandlerInterceptor<? super EventMessage<?>> eventHandlerInterceptor) Registers aMessageHandlerInterceptorforEventMessages.Will always be invoked before an event is handled to perform a task specified in the interceptor. Interceptors are invoked in the order they have been registered in.
- Parameters:
eventHandlerInterceptor- the interceptor for handlingEventMessages- Returns:
- The current
FixtureConfiguration, for fluent interfacing.
-
registerStartRecordingCallback
Registers a callback to be invoked when the fixture execution starts recording. This happens right before invocation of the 'when' step (stimulus) of the fixture. Use this to manage Saga dependencies which are not an Axon first class citizen, but do require monitoring of their interactions. For example, register the callback to set a mock in recording mode.- Parameters:
onStartRecordingCallback- callback to invoke- Returns:
- the current FixtureConfiguration, for fluent interfacing
-
registerListenerInvocationErrorHandler
FixtureConfiguration registerListenerInvocationErrorHandler(ListenerInvocationErrorHandler listenerInvocationErrorHandler) Registers aListenerInvocationErrorHandlerto be set for the Saga to deal with exceptions being thrown from within Saga Event Handlers. Will be given to theAnnotatedSagaManagerfor the defined Saga type. Defaults to aLoggingErrorHandlerwrapped inside aRecordingListenerInvocationErrorHandler.- Parameters:
listenerInvocationErrorHandler- to be set for the Saga to deal with exceptions being thrown from within Saga Event Handlers- Returns:
- the current FixtureConfiguration, for fluent interfacing
-
suppressExceptionInGivenPhase
Configure whether the fixture should suppress exceptions thrown during the given-phase. Whensuppressistrue, the fixture moves on to the when-phase regardless of any exceptions thrown during the given-phase.Note that setting this to
truemeans theregisteredListenerInvocationErrorHandleris not invoked during exception in the given-phase. Defaults to suppressing during given-phase exceptions.- Parameters:
suppress- Abooleandescribing whether the fixture should suppress failures during the given-phase.- Returns:
- The current fixture, for fluent interfacing.
-
registerResourceInjector
Registers aResourceInjectorwithin this fixture. This approach can be used if a customResourceInjectorhas been built for a project which the user wants to take into account when testing it's sagas.The provided
resourceInjectorwill be paired with the fixture's defaultResourceInjectorto keep support for theregisterResource(Object)andwithTransienceCheckDisabled()methods. Note that first the default injector is called, and after that the givenresourceInjector. This approach ensures the fixture's correct workings for default provided resources, like theEventBusandCommandBus}, whilst allowing the capability to append and/or override with the givenresourceInjector.Care should be taken if the custom
resourceInjectoroverrides default resources like theEventBusandCommandBus, as the fixture uses specialized versions of the default sources to support all testing functionality.- Parameters:
resourceInjector- theResourceInjectorto register within this fixture- Returns:
- the current FixtureConfiguration, for fluent interfacing
-
setCallbackBehavior
Sets the instance that defines the behavior of the Command Bus when a command is dispatched with a callback.- Parameters:
callbackBehavior- The instance deciding to how the callback should be invoked.
-
givenAggregate
Use this method to indicate that an aggregate with given identifier published certain events. Can be chained to build natural sentences:
andThenAggregate(someIdentifier).published(someEvents)- Parameters:
aggregateIdentifier- The identifier of the aggregate the events should appear to come from- Returns:
- an object that allows registration of the actual events to send
-
givenCurrentTime
Use this method to indicate a specific moment as the initial current time "known" by the fixture at the start of the given state.- Parameters:
currentTime- The simulated "current time" at which the given state is initialized- Returns:
- an object that allows chaining of more given state
-
givenAPublished
Indicates that the givenapplicationEventhas been published in the past. This event is sent to the associated sagas.- Parameters:
event- The event to publish- Returns:
- an object that allows chaining of more given state
-
givenAPublished
Indicates that the giveneventwith givenmetaDatahas been published in the past. This event is sent to the associated sagas.- Parameters:
event- The event to publishmetaData- The meta data to attach to the event- Returns:
- an object that allows chaining of more given state
-
givenNoPriorActivity
WhenState givenNoPriorActivity()Indicates that no relevant activity has occurred in the past.- Returns:
- an object that allows the definition of the activity to measure Saga behavior
- Since:
- 2.1.1
-
currentTime
Instant currentTime()Returns the time as "known" by the fixture. This is the time at which the fixture was created, plus the amount of time the fixture was told to simulate a "wait". This time can be used to predict calculations that the saga may have made based on timestamps from the events it received.- Returns:
- the simulated "current time" of the fixture.
-
getEventBus
EventBus getEventBus()Returns the event bus used by this fixture. The event bus is provided for wiring purposes only, for example to allow command handlers to publish events other than Domain Events. Events published on the returned event bus are recorded an evaluated in theResultValidatoroperations.- Returns:
- the event bus used by this fixture
-
getCommandBus
CommandBus getCommandBus()Returns the command bus used by this fixture. The command bus is provided for wiring purposes only, for example to support composite commands (a single command that causes the execution of one or more others).- Returns:
- the command bus used by this fixture
-