I just started experimenting with Apache Isis and had some issues running
integration tests.
1. Integration tests are not executed in module `module-simple`.
This is only true for projects generated from the 2.0.0-M1 archetype. The
integration tests in module `application` are executed.
To reproduce generate a project:
mvn archetype:generate \
-D archetypeGroupId=org.apache.isis.archetype \
-D archetypeArtifactId=simpleapp-archetype \
-D archetypeVersion=2.0.0-M1 \
-D groupId=com.mycompany \
-D artifactId=isis-2 \
-D version=1.0-SNAPSHOT \
-B
Then execute:
- mvn clean install
- mvn -pl module-simple verify
The test output for integration tests is empty.
2. Integration test logging includes a lot of log events twice.
During the bootstrapping of Isis for the integration test there seem to be two
appenders. The lines starting with the current time come from the appender
configured in `logging-integtest.properties`. I was not able to understand
where the second appender is configured. This is not a big problem just a bit
distracting.
Here is an example:
[INFO]
[INFO] --- maven-surefire-plugin:2.19.1:test (integ-bddspecs) @
isis-2-application ---
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running domainapp.application.bdd.specs.RunIntegBddSpecs
17:23:27,766 [HeadlessWithBootstrappingAbstract main INFO ]
isis.integTest.module = null
17:23:27,767 [HeadlessWithBootstrappingAbstract main INFO ]
isis.headless.module = null
17:23:27,840 [IsisConfigurationDefault main INFO ] adding
isis.appManifest = org.apache.isis.applib.AppManifestAbstract2$Default
74 [IsisConfigurationDefault main INFO ] adding isis.appManifest =
org.apache.isis.applib.AppManifestAbstract2$Default
17:23:28,077 [Reflections main INFO ] Reflections took 195 ms
to scan 12 urls, producing 319 keys and 1050 values
311 [Reflections main INFO ] Reflections took 195 ms to
scan 12 urls, producing 319 keys and 1050 values
17:23:28,204 [IsisConfigurationDefault main INFO ] adding
isis.services.ServicesInstallerFromAnnotation.packagePrefix =
domainapp.modules.simple,domainapp.application
438 [IsisConfigurationDefault main INFO ] adding
isis.services.ServicesInstallerFromAnnotation.packagePrefix =
domainapp.modules.simple,domainapp.application
17:23:28,205 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.RegisterEntities.packagePrefix =
domainapp.modules.simple,domainapp.application
439 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.RegisterEntities.packagePrefix =
domainapp.modules.simple,domainapp.application
17:23:28,207 [IsisConfigurationDefault main INFO ] adding isis.services
=
org.apache.isis.core.integtestsupport.components.HeadlessTransactionSupportDefault
441 [IsisConfigurationDefault main INFO ] adding isis.services =
org.apache.isis.core.integtestsupport.components.HeadlessTransactionSupportDefault
17:23:28,207 [IsisConfigurationDefault main INFO ] adding
isis.deploymentType = server_prototype
441 [IsisConfigurationDefault main INFO ] adding isis.deploymentType
= server_prototype
17:23:28,207 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.datanucleus.cache.level2.type = none
441 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.datanucleus.cache.level2.type = none
17:23:28,207 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.datanucleus.persistenceByReachabilityAtCommit =
false
441 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.datanucleus.persistenceByReachabilityAtCommit =
false
17:23:28,208 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.datanucleus.cache.level2.mode = ENABLE_SELECTIVE
442 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.datanucleus.cache.level2.mode = ENABLE_SELECTIVE
17:23:28,208 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName =
org.hsqldb.jdbcDriver
442 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName =
org.hsqldb.jdbcDriver
17:23:28,208 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.datanucleus.schema.validateAll = false
442 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.datanucleus.schema.validateAll = false
17:23:28,208 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword = ********
442 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword = ********
17:23:28,209 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL =
jdbc:hsqldb:mem:test-07b19913-71b6-4994-8d71-6a3aaaf79e00
443 [IsisConfigurationDefault main INFO ] adding
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL =
jdbc:hsqldb:mem:test-07b19913-71b6-4994-8d71-6a3aaaf79e00
3. Unexpected error when accessing collection through wrapper.
Inside of integration tests i can’t seem to access collections through the
getter if the object is wrapped. From the documentation I got the impression
that that should be possible.
This is the offending line:
assertThat(wrap(food).getCustomUnits()).hasSize(1);
This is the error I see:
java.lang.IllegalArgumentException:
domainapp.modules.core.dom.impl.Food#customUnits: more than one ImperativeFacet
for method getCustomUnits , with inconsistent intents:
[CollectionAccessorFacetViaAccessor[type=PropertyOrCollectionAccessorFacet,method=public
java.util.SortedSet domainapp.modules.core.dom.impl.Food.getCustomUnits()],
CollectionClearFacetViaAccessor[type=CollectionClearFacet,method=public
java.util.SortedSet domainapp.modules.core.dom.impl.Food.getCustomUnits()],
CollectionAddToFacetViaAccessor[type=CollectionAddToFacet,method=public
java.util.SortedSet domainapp.modules.core.dom.impl.Food.getCustomUnits()],
CollectionRemoveFromFacetViaAccessor[type=CollectionRemoveFromFacet,method=public
java.util.SortedSet domainapp.modules.core.dom.impl.Food.getCustomUnits()]]
at
org.apache.isis.core.metamodel.facets.ImperativeFacet$Util.getIntent(ImperativeFacet.java:167)
at
org.apache.isis.core.wrapper.handlers.DomainObjectInvocationHandler.invoke(DomainObjectInvocationHandler.java:199)
at
domainapp.modules.core.dom.impl.Food$bb$VbQPvDRl.getCustomUnits(Unknown Source)
at
domainapp.modules.core.integtests.tests.Food_IntegTest$AddUnit.shouldWork(Food_IntegTest.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:513)
at
org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
at
org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:170)
at
org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
at
org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:166)
at
org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:113)
at
org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:58)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:113)
at
org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:121)
at
java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at
java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at
java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at
java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at
java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at
java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:121)
at
org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:121)
at
java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at
java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at
java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at
java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at
java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at
java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:121)
at
org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:55)
at
org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at
org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
at
org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at
org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at
com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:74)
at
com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
I can provide a demo repo if this needs some investigation but maybe I’m making
some obvious mistake here.
Thanks four your help.