Organization stats
holixon / axon-testing Goto Github PK
View Code? Open in Web Editor NEWExtensions that allow better testing of Axon applications
License: Apache License 2.0
Extensions that allow better testing of Axon applications
License: Apache License 2.0
everything to build and publish kotlin libs is in the parent, we should use it and save a few 100ets LoC
SagaFixtures internally have an InMemorySagaStore that keeps the state of the saga under test.
It is a private field and not accessible.
It would be great if we could access/load the current saga state to make assertions (not restricted to hamcrest).
Provide an optional msg String that can be used to describe the given state.
GIVEN
.noPriorActivity()
WHEN
.aggregatePublishes(
orderId().toString(),
emailNotificationPreparedEvent()
)
THEN
.expectDispatchedCommands(sendEmailCommand(), completeEmailNotificationDomainCommand())
fails with
java.lang.IllegalArgumentException: Can not set java.lang.String field *.command.SendEmailCommand.subject to *.command.CompleteEmailNotificationDomainCommand
Probably JGivens @table annotation cannot work with commands of different types.
Write it in the README.
The AxonJgiven factory methods for builders did not use reified types correctly ... fix them to support the full power of kotlin.
Also: move the Java factory methods to AxonJgivenJava so the kotlin importer does not get confused.
Potentially breaking if anyone used this from Java.
The (binary only) given extension "jgiven-addons" is deprecated, so we should use https://github.com/toolisticon/jgiven-kotlin instead.
using ResultValidator.expectState(Consumer<T> validator
we can use custom (assert-j) assertions to validate the aggregate.
We have a dedicated module to support axon, jgiven and junit4.
As junit5 is completely established everywhere, we should drop this ... especially as we have an asymetry ... upcaster testing does not support junit4, so it is either dropping for jgiven or establishing for upcasters.
I closed milestone 4.7.4.0 and ran mvn release start. Success. Then I ran mvn release finish ... dev has the new version but the github action failed.
I don't know why.
@zambrovski - can you help out?
https://github.com/holixon/axon-testing/actions/runs/4820142494
can we fix/save the 4.7.4.0 release? Or do we have to skip and move on to a x.1 ?
The framework supports CorrelationDataProviders that automatically propagates MetaData properties to all messages.
I want to test these data providers.
With the fixture based test setup, this is not supported directly.
Currently we only change the revision of DummyEvent put do not modify the payload.
Let's provide an example that shows how to work with the intermediate format (JsonNode) to change the resulting payload json.
see #271
I would suggest switching to a semVer model that reflects the framework version this lib is build for. 4.7.0.0
Maven should not display downloads.
We have multiple versions the classpath/overall external-libraries
we should analyse where these come from and use exclusions (or explicit declaration) to force common latest version.
When we expect a vararg collection of events or commands, we want them rendered nicely in the jgiven report.
with #161 we removed the @table annotation because it could not (out of the box?) deal with different types.
So with version 0.2.0 we just get a string listing all events/commands by toString()
and joinToString()
It would be nice to quickly see from a jgiven report which events/commands where used to have a table like rendering.
We should explore if we can achieve this by using custom formatters in jgiven.
Problem: We know nothing about the expected events/commands up front, so the approach will probably have to be very generic like
| type | toString-value |
leave as is
using axon-avro-serialier as a template, I will rename and restructure the intermediate moms
No support
JUnit suppot for reading in events from files and construction of intermediate representation.
Manual code duplication
any objections against releasing the current milestone @zambrovski ?
Put everything needed to pom.xml
Try out to avoid explicit settings manipulation (use setupjava
)
The failure messages should be improved.
XmlAssert
and JsonAssert
for intermediate representation assertsObjectAssert
the "expected ..., but got..." should be always available.isEqualDeserializedTo
has a copy-paste error messagehasTypeRevision
has a copy-paste error messagehasType
has copy-paste error messageSince we have more ideas for test enhancement, we agreed to rename the repo to widen the scope.
We have multiple versions the classpath/overall external-libraries
we should analyse where these come from and use exclusions (or explicit declaration) to force common latest version.
the versioning of this lib is : first three digits: axon testing version. last digit: build/version count of this lib.
Currently, the 4.8.0.0 release internally uses axon-framework 4.7.5
use the latest version
When something fails "behind the scenes" (events can not be created because they are invalid, axon setup not working, ...) all tests become just "red", instead single steps failing.
It can be hard to debug/analyse what actually failed.
Typical exception: GIVEN/WHEN had issues, jgiven continues and has invalid state:
15:00:18.308 [main] ERROR c.t.jgiven.impl.ScenarioExecutor - The field resultValidator is required but has not been provided.
com.tngtech.jgiven.exception.JGivenMissingRequiredScenarioStateException: The field resultValidator is required but has not been provided.
at com.tngtech.jgiven.impl.inject.ValueInjector.updateValues(ValueInjector.java:115)
at com.tngtech.jgiven.impl.ScenarioExecutor.updateScenarioState(ScenarioExecutor.java:239)
at com.tngtech.jgiven.impl.ScenarioExecutor.access$500(ScenarioExecutor.java:41)
at com.tngtech.jgiven.impl.ScenarioExecutor$StageTransitionHandlerImpl.enterStage(ScenarioExecutor.java:172)
at com.tngtech.jgiven.impl.intercept.StepInterceptorImpl.intercept(StepInterceptorImpl.java:80)
at com.tngtech.jgiven.impl.intercept.ByteBuddyMethodInterceptor.interceptSuper(ByteBuddyMethodInterceptor.java:37)
Ideas:
just do it!
We have multiple versions the classpath/overall external-libraries
we should analyse where these come from and use exclusions (or explicit declaration) to force common latest version.
The AggregateTestFixture is both: given and when stage. Depending on what happened before, calls to given events/given commands in our jgiven stages can have side effects (ensureRepositoryConfiguration
, finalizeAggregateConfiguration
, clearGivenWhenState
).
In our Given-Stage we must ensure that we call the given
methods first and then the andGiven
methods.
using Kotlin 1.8.21 we get
[WARNING] '-Xjvm-default=enable' is deprecated, please use '-Xjvm-default=all|all-compatibility'
we should fix the flag
from the example:
@ProvidedScenarioState
private final FixtureConfiguration<BankAccountAggregate> fixture = new AggregateTestFixture<>(BankAccountAggregate.class)
.registerInjectableResource(Mockito.mock(MyService.class));
Due to a strange behavior of the original axon-test, when I use fluent configuration methods on the AggregateTestFixture, its type changes to the super type FixtureConfiguration
.
But the JGiven Stages we provide, are relying on
@ExpectedScenarioState(required = true)
private lateinit var fixture: AggregateTestFixture<T>
So jgiven tests fail as soon as we start to use non-trivial set ups.
I can use the fluent configuration of my test fixture and still get it injected in my stages correctly.
com.tngtech.jgiven.exception.JGivenMissingRequiredScenarioStateException: The field fixture is required but has not been provided.
These methods belong to the when stage and where added to the given stage by accident, they are not usable in tests and should be removed.
Using 4.7.x we get
[WARNING] jgiven/core/src/main/kotlin/aggregate/AggregateFixtureThen.kt: (194, 5) 'expectDeadlinesMet(vararg Any!): ResultValidator<T!>!' is deprecated. Deprecated in Java
[WARNING] jgiven/core/src/main/kotlin/aggregate/AggregateFixtureThen.kt: (202, 5) 'expectDeadlinesMetMatching(Matcher<out MutableList<in DeadlineMessage<*>!>!>!): ResultValidator<T!>!' is deprecated. Deprecated in Java
[WARNING] jgiven/core/src/main/kotlin/aggregate/AggregateFixtureWhen.kt: (47, 28) 'whenThenTimeAdvancesTo(Instant!): ResultValidator<T!>!' is deprecated. Deprecated in Java
[WARNING] jgiven/core/src/main/kotlin/aggregate/AggregateFixtureWhen.kt: (55, 28) 'whenThenTimeElapses(Duration!): ResultValidator<T!>!' is deprecated. Deprecated in Java
[WARNING] jgiven/core/src/main/kotlin/saga/SagaFixtureThen.kt: (296, 15) 'expectDeadlinesMet(vararg Any!): FixtureExecutionResult!' is deprecated. Deprecated in Java
we should check and use correct methods.
fixtures can be used in test scope of libs and examples, so as already done with the bankaccount/moneytranfser, gift card should be moved.
When I use given().state(...)
to setup the internal state of the aggregate, the test fails with the exception below. As there where no events involved, this violates the "load aggregate" contract.
initialize the internal state directly, instead of applying a bunch of events.
failure, see below.
org.axonframework.test.FixtureExecutionException: Failed to execute givenCommands
at org.axonframework.test.aggregate.AggregateTestFixture$ExecutionExceptionAwareCallback.onResult(AggregateTestFixture.java:1008)
at org.axonframework.commandhandling.WrappedCommandCallback.onResult(WrappedCommandCallback.java:51)
at org.axonframework.commandhandling.MonitorAwareCallback.onResult(MonitorAwareCallback.java:57)
at org.axonframework.commandhandling.SimpleCommandBus.handle(SimpleCommandBus.java:204)
at org.axonframework.commandhandling.SimpleCommandBus.doDispatch(SimpleCommandBus.java:165)
at org.axonframework.commandhandling.SimpleCommandBus.lambda$dispatch$2(SimpleCommandBus.java:131)
at org.axonframework.tracing.Span.run(Span.java:101)
at org.axonframework.commandhandling.SimpleCommandBus.dispatch(SimpleCommandBus.java:125)
at org.axonframework.test.aggregate.AggregateTestFixture.lambda$andGivenCommands$1(AggregateTestFixture.java:400)
at org.axonframework.test.aggregate.AggregateTestFixture.executeAtSimulatedTime(AggregateTestFixture.java:413)
at org.axonframework.test.aggregate.AggregateTestFixture.andGivenCommands(AggregateTestFixture.java:400)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$commands$1.invoke(AggregateFixtureGiven.kt:62)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$commands$1.invoke(AggregateFixtureGiven.kt:57)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven.execute(AggregateFixtureGiven.kt:119)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven.commands(AggregateFixtureGiven.kt:57)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ.commands$accessor$CbQpRjs8(Unknown Source)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ$auxiliary$zFricsMZ.call(Unknown Source)
at com.tngtech.jgiven.impl.intercept.StepInterceptorImpl.doIntercept(StepInterceptorImpl.java:111)
at com.tngtech.jgiven.impl.intercept.StepInterceptorImpl.intercept(StepInterceptorImpl.java:82)
at com.tngtech.jgiven.impl.intercept.ByteBuddyMethodInterceptor.interceptSuper(ByteBuddyMethodInterceptor.java:37)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ.commands(Unknown Source)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven.commands(AggregateFixtureGiven.kt:50)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ.commands$accessor$CbQpRjs8(Unknown Source)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ$auxiliary$5NzUNlV0.call(Unknown Source)
at com.tngtech.jgiven.impl.intercept.StepInterceptorImpl.doIntercept(StepInterceptorImpl.java:111)
at com.tngtech.jgiven.impl.intercept.StepInterceptorImpl.intercept(StepInterceptorImpl.java:82)
at com.tngtech.jgiven.impl.intercept.ByteBuddyMethodInterceptor.interceptSuper(ByteBuddyMethodInterceptor.java:37)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ.commands(Unknown Source)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven.command(AggregateFixtureGiven.kt:43)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ.command$accessor$CbQpRjs8(Unknown Source)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ$auxiliary$oYo2wzn9.call(Unknown Source)
at com.tngtech.jgiven.impl.intercept.StepInterceptorImpl.doIntercept(StepInterceptorImpl.java:111)
at com.tngtech.jgiven.impl.intercept.StepInterceptorImpl.intercept(StepInterceptorImpl.java:82)
at com.tngtech.jgiven.impl.intercept.ByteBuddyMethodInterceptor.interceptSuper(ByteBuddyMethodInterceptor.java:37)
at io.holixon.axon.testing.jgiven.aggregate.AggregateFixtureGiven$ByteBuddy$Rkav65nZ.command(Unknown Source)
at com.fiege.oms.installationpartner.command.domain.model.aggregate.InstallationPartnerAggregateTest$InstallerEntityTest.remove a serviceArea from installer is idempotent(InstallationPartnerAggregateTest.kt:737)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
Caused by: org.axonframework.modelling.command.AggregateNotFoundException: No 'given' events were configured for this aggregate, nor have any events been stored.
at org.axonframework.test.aggregate.AggregateTestFixture$RecordingEventStore.readEvents(AggregateTestFixture.java:913)
at org.axonframework.eventsourcing.EventSourcingRepository.readEvents(EventSourcingRepository.java:169)
at org.axonframework.eventsourcing.EventSourcingRepository.doLoadWithLock(EventSourcingRepository.java:129)
at org.axonframework.eventsourcing.EventSourcingRepository.doLoadWithLock(EventSourcingRepository.java:55)
at org.axonframework.modelling.command.LockingRepository.doLoad(LockingRepository.java:137)
at org.axonframework.modelling.command.LockingRepository.doLoad(LockingRepository.java:60)
at org.axonframework.modelling.command.AbstractRepository.lambda$null$6(AbstractRepository.java:141)
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1220)
at org.axonframework.modelling.command.AbstractRepository.lambda$load$8(AbstractRepository.java:140)
at org.axonframework.tracing.Span.runSupplier(Span.java:163)
at org.axonframework.modelling.command.AbstractRepository.load(AbstractRepository.java:137)
at org.axonframework.test.aggregate.AggregateTestFixture$IdentifierValidatingRepository.load(AggregateTestFixture.java:768)
at org.axonframework.modelling.command.AggregateAnnotationCommandHandler$AggregateCommandHandler.handle(AggregateAnnotationCommandHandler.java:568)
at org.axonframework.modelling.command.AggregateAnnotationCommandHandler$AggregateCommandHandler.handle(AggregateAnnotationCommandHandler.java:557)
at org.axonframework.messaging.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:57)
at org.axonframework.messaging.unitofwork.DefaultUnitOfWork.executeWithResult(DefaultUnitOfWork.java:77)
at org.axonframework.commandhandling.SimpleCommandBus.lambda$handle$4(SimpleCommandBus.java:201)
at org.axonframework.tracing.Span.runSupplier(Span.java:163)
at org.axonframework.commandhandling.SimpleCommandBus.handle(SimpleCommandBus.java:192)
... 111 more
This library looks interesting, but I was wondering, does it work with axon-spring-boot?
Thanks, Andy.
We have multiple versions the classpath/overall external-libraries
we should analyse where these come from and use exclusions (or explicit declaration) to force common latest version.
I will copy/adopt the bank account example from out jughh talk, so we have something simple yet non-trivial to test against.
new versions are out
We should use latest actions.
Readme should explain the purpose of this lib,
// empty
The default "expectEvent(s)" does an equals comparison of the caught events and passed expected events, which fails when values are set in the commandhandler that are not under control of the caller (generated aggregateId, generated timestamps, ...).
Idea: capture the actual events as in mockitos ArgumentCaptor and then assert manually on that list of events.
In order to assert results of upcaster I want to do it directly using specific assersions, instead of unpackaging the result every time in the test code.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.