What are you instantiating in tapestry-jpa that needs context? To test your persistence layer, you should only need an entityManager. You could have something like this as a base class for unit testing: public abstract class BasePersistenceTest { private static Class<?>[] entities = new Class[] { DataEntity.class, UserAccount.class, ... };
private final static PersistenceUnitConfigurer configurer = new PersistenceUnitConfigurer() { public void configure(final TapestryPersistenceUnitInfo unitInfo) { for (Class<?> entityClass : entities) unitInfo.addManagedClass(entityClass); } }; protected EntityManagerSource emSource; protected EntityManager em; public BasePersistenceTest() { emSource = new EntityManagerSourceImpl(LoggerFactory.getLogger(BasePersistenceTest.class), new ClasspathResource( "persistence.xml"), configurer, CollectionFactory.<String, PersistenceUnitConfigurer> newMap()); } @Before public void createEntityManager() { em = emSource.create("persistence"); } Then mock/instantiate services as needed on top to test your persistence logic. Kalle On Thu, Jul 17, 2014 at 1:32 PM, Lance Java <lance.j...@googlemail.com> wrote: > Ah, I haven't used tapestry-jpa myself. tapestry-hibernate is split into > two modules to allow for this type of testing. > > If this is the case, you may need to override ApplicationGlobals and > provide a mock ServletContext as I said initially. > On 17 Jul 2014 17:37, "Charlouze" <m...@charlouze.com> wrote: > > > I have separated modules for the service tier and the web tier but > > tapestry-jpa requires tapestry web modules... IMO, it should not but > that's > > the way it is (maybe JpaModule should be divided into two modules). > Anyway, > > I would have the same problem with beanvalidation module. > > > > I'll take a look at the tapestry sources for examples > > > > > > 2014-07-17 17:29 GMT+02:00 Lance Java <lance.j...@googlemail.com>: > > > > > On second thought of you are unit testing just your jpa classes you > > > shouldn't need the ServletContext to be mocked. > > > > > > Note that tapestry modules have been split in such a way that Web > > services > > > are separated from core services. I think your test should not require > > any > > > web modules. > > > > > > This might require you to split your custom module into 2 modules (web > > and > > > core) but will make testing easier. > > > On 17 Jul 2014 16:20, "Lance Java" <lance.j...@googlemail.com> wrote: > > > > > > > I'm not sure exactly what you're doing but you probably need to > > override > > > > the ApplicationGlobals service such that getServletContext() returns > an > > > > appropriate mock. > > > > > > > > If you're using junit, you might want to try the new > > > > TapestryIOCJunit4ClassRunner. See the tapestry sources for example > test > > > > cases. > > > > On 17 Jul 2014 16:02, "Charlouze" <m...@charlouze.com> wrote: > > > > > > > >> Hello everyone. > > > >> > > > >> I'm currently setting up an application using T5.4-b13. For unit > > > testing, > > > >> I > > > >> use junit, unitils-dbunit, spock (with spock-tapestry and > > spock-unitils > > > >> extension). > > > >> > > > >> In my specification I added @submodule annotation with every needed > > > module > > > >> (Tapestry, Jpa, beanValidator and my custom module). > > > >> > > > >> My problem is that there are no context and therefore, my tests do > not > > > >> pass > > > >> the assert context != null in ContextResource class constructor. > Does > > > >> anyone know what can I do ? > > > >> > > > >> Thanks in advance > > > >> > > > >> Charles. > > > >> > > > > > > > > > >