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.