+1 on that. That said, I still find myself conflicted on this. There's definitely some value in spiking a business app, without tests, just in order to validate that there's a worthwhile app to build. But if one takes that road, then it's soooo very tempting to keep that prototype rather than throwing it away.
Although writing fixture scripts adds some overhead, I think it's worthwhile to think of writing them as part of the requirements gathering phase: what is the "given" (as in given/when/then) for a particular scenario. If one isn't able to get the app into that initial state, then there's probably some other prerequisite stories that still need to be written. And of course, those fixture scripts are useful not only for demoing the app, but can also be reused in the integration tests. Anyway, glad you're going back to simpleapp and then adding your own stuff in piecemeal. I suspect it won't take too long to get back to where you presently are, but I'm sure you'll tell us one way or another :-) Cheers Dan PS: the simpleapp does have a BDD integration with Cucumber. Although BDD is cool, it only makes sense to add the overhead if you are actually doing BDD in collaboration with your business users. If you aren't (ie if instead you are "just" deploying the app itself into a UAT environemtn in order to obtain feedback / verification of behaviour) then I'd suggest just focusing on the regular JUnit tests and remove those BDD specs. On 4 September 2015 at 10:11, Stephen Cameron <[email protected]> wrote: > Hi, > > Yes, I could see the probable reason, but couldn't figure out what might be > a fix it. > > I have changed strategy and I think it will be better to begin over with > simpleapp and add things in. Better to have a starting point that works > then I know that the breakage was due to the last thing added, but also to > do it the TDD way. > > I looked at fixtures and integtests early on, but was in too much of a > hurry to show something to the client. I've decided to go back to the right > approach. > > Try to eliminate the stress early (well mid-way) through the project rather > than it hitting at the end, as I read. > > On Fri, Sep 4, 2015 at 6:27 PM, Dan Haywood <[email protected]> > wrote: > > > Hi Steve, > > > > I've taken a quick look, and found one issue: > > > > > > > https://github.com/Stephen-Cameron-Data-Services/isis-chats/blob/master/integtests/src/test/java/au/com/scds/isis/integtests/bootstrap/SimpleAppSystemInitializer.java#L51 > > > > should be "au.com.scds.chats.dom.module". > > > > > > However, the error reporting clearly needs to be better to help track > this > > down ... I saw an exception regarding the misconfiguration in the > console, > > but it didn't seem to be written to stdout or stderr, for some reason. > > > > The subsequent exception that you are seeing (NullPointerException) is > > because Isis tries to do a shutdown after a failed initialization, and > this > > fails - perhaps not surprisingly - because the initialization was > > incomplete. I think this could be improved too, so will look into it. > > > > ~~~ > > > > With this issue fixed, I did then hit a further issue with respect to > > database schemas. I will take a look at that later today, though I have > > some other things to work on first, I'm afraid > > > > HTH > > Dan > > > > > > > > > > On 4 September 2015 at 06:10, Stephen Cameron < > [email protected]> > > wrote: > > > > > Hi All, > > > > > > I am trying to make a start with integration testing, not much success > so > > > far. > > > > > > I am getting an NullPointerException in the metamodel creation phase I > > > think. > > > > > > > > The stack trace indicates that the framework can't find an implementation > > of TranslationService. Under normal circumstances the implementation is > > provided by default by the framework > > (org.apache.isis.core.runtime.services.i18n.po.TranslationServicePo). > > > > > > > > > > > I tried to set a breakpoint in Eclipse to see what is being translated, > > but > > > that does not happen for this exception, do I need to have the Isis > code > > on > > > the classpath? > > > > > > Maybe I can get more info on the metamodel validation in the log? I am > > > mostly just seeing the datanuclues db schema creation to this point. > > > > > > Perhaps I need to go back to the start, beginning with simpleapp and > > start > > > adding things to be truly doing TDD! Retrospective is not easy :) > > > > > > java.lang.NullPointerException > > > 14:58:11,347 [ObjectReflectorDefault Thread-0 INFO ] shutting down > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault@6c9499ea > > > at > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated.<init>(NamedFacetTranslated.java:42) > > > at > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory.translateName(TranslationFacetFactory.java:98) > > > at > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory.process(TranslationFacetFactory.java:61) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor.process(FacetProcessor.java:324) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createPropertyFacetedMethodsFromAccessors(FacetedMethodsBuilder.java:385) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.findAndRemovePropertyAccessorsAndCreateCorrespondingFacetedMethods(FacetedMethodsBuilder.java:339) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createAssociationFacetedMethods(FacetedMethodsBuilder.java:316) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.getAssociationFacetedMethods(FacetedMethodsBuilder.java:294) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.createAssociations(ObjectSpecificationDefault.java:220) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:178) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspect(ObjectReflectorDefault.java:514) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:501) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:400) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:378) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecification(ObjectReflectorDefault.java:344) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.catalogNamedQueries(DataNucleusApplicationComponents.java:242) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.initialize(DataNucleusApplicationComponents.java:112) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.<init>(DataNucleusApplicationComponents.java:103) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createDataNucleusApplicationComponentsIfRequired(DataNucleusPersistenceMechanismInstaller.java:134) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createObjectStore(DataNucleusPersistenceMechanismInstaller.java:110) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory.createPersistenceSession(PersistenceSessionFactory.java:95) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.session.IsisSessionFactory.openSession(IsisSessionFactory.java:141) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.context.IsisContextStatic.openSessionInstance(IsisContextStatic.java:70) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.context.IsisContext.openSession(IsisContext.java:279) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.shutdownServices(IsisSystem.java:311) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.shutdown(IsisSystem.java:300) > > > at > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest.shutdown(IsisSystemForTest.java:467) > > > at > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest.access$100(IsisSystemForTest.java:74) > > > at > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest$Builder$1.run(IsisSystemForTest.java:301) > > > java.lang.NullPointerException > > > at > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated.<init>(NamedFacetTranslated.java:42) > > > at > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory.translateName(TranslationFacetFactory.java:98) > > > at > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory.process(TranslationFacetFactory.java:61) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor.process(FacetProcessor.java:324) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createPropertyFacetedMethodsFromAccessors(FacetedMethodsBuilder.java:385) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.findAndRemovePropertyAccessorsAndCreateCorrespondingFacetedMethods(FacetedMethodsBuilder.java:339) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createAssociationFacetedMethods(FacetedMethodsBuilder.java:316) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.getAssociationFacetedMethods(FacetedMethodsBuilder.java:294) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.createAssociations(ObjectSpecificationDefault.java:220) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:178) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspect(ObjectReflectorDefault.java:514) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:501) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:400) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:378) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecifications(ObjectReflectorDefault.java:415) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createAssociationFacetedMethods(FacetedMethodsBuilder.java:310) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.getAssociationFacetedMethods(FacetedMethodsBuilder.java:294) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.createAssociations(ObjectSpecificationDefault.java:220) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:178) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspect(ObjectReflectorDefault.java:514) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:501) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:400) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:378) > > > at > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecification(ObjectReflectorDefault.java:344) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.catalogNamedQueries(DataNucleusApplicationComponents.java:242) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.initialize(DataNucleusApplicationComponents.java:112) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.<init>(DataNucleusApplicationComponents.java:103) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createDataNucleusApplicationComponentsIfRequired(DataNucleusPersistenceMechanismInstaller.java:134) > > > at > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createObjectStore(DataNucleusPersistenceMechanismInstaller.java:110) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory.createPersistenceSession(PersistenceSessionFactory.java:95) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.session.IsisSessionFactory.openSession(IsisSessionFactory.java:141) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.context.IsisContextStatic.openSessionInstance(IsisContextStatic.java:70) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.context.IsisContext.openSession(IsisContext.java:279) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.shutdownServices(IsisSystem.java:311) > > > at > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.shutdown(IsisSystem.java:300) > > > at > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest.shutdown(IsisSystemForTest.java:467) > > > at > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest.access$100(IsisSystemForTest.java:74) > > > at > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest$Builder$1.run(IsisSystemForTest.java:301) > > > 14:58:11,442 [ObjectReflectorDefault Thread-1 INFO ] shutting down > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault@6c9499ea > > > > > > Results : > > > > > > Tests in error: > > > TODO: implement me > > > TODO: implement me > > > TODO: implement me > > > TODO: implement me > > > TODO: implement me > > > TODO: implement me > > > ParticipantsIntegTest$Create>SimpleAppIntegTest.initClass:33 » > Runtime > > > java.la... > > > ParticipantsIntegTest$ListAll>SimpleAppIntegTest.initClass:33 » > Runtime > > > java.l... > > > > > >
