0 Replies Latest reply on Jul 2, 2007 4:29 AM by alpha1251

    Problem writing unit tests

    alpha1251

      Hello all.
      I was trying to write a simple unit test for Seam hotel booking example and had some troubles. Seam 1.2.1GA

      Test was the following
      @Test
      public void test_1_COMPONENT_CreateUser () throws Exception {

      EntityManagerFactory emf = Persistence.createEntityManagerFactory("bookingDatabase");
      final EntityManager em = emf.createEntityManager();

      em.getTransaction().begin();

      User user = new User();
      user.setUsername("blabla");
      user.setName("foobar");
      user.setPassword("foobar");
      RegisterAction action = new RegisterAction();
      //action.setUser(user);
      setField (action,"user",user);
      action.setEm(em);
      action.setVerify("foobar");

      action.register();

      assert action.isRegistered()==true;

      em.getTransaction().commit();
      em.close();
      }

      And I had the following exception

      javax.persistence.PersistenceException: org.hibernate.QueryException: unexpected char: '#' [select u.username from org.jboss.seam.example.booking.User u where u.username=#{user.username}]
      at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:567)
      at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:79)
      at org.jboss.seam.example.booking.RegisterAction.register(RegisterAction.java:36)
      at org.jboss.seam.example.booking.test.CreateUserTest.test_1_COMPONENT_CreateUser(CreateUserTest.java:36)
      Caused by: org.hibernate.QueryException: unexpected char: '#' [select u.username from org.jboss.seam.example.booking.User u where u.username=#{user.username}]
      at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
      at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:110)
      at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:77)
      at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:56)
      at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
      at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
      at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
      at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1612)
      at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:76)
      ... 24 more

      but I seems, that the main cause is the following

      09:44:14,331 ERROR [AbstractKernelController] Error installing to Start: name=jboss.j2ee:jar=bin,name=Dispatcher,service=EJB3 state=Create
      javax.naming.NamingException: Could not bind statless proxy with ejb name Dispatcher into JNDI under jndiName: /Dispatcher/local [Root exception is javax.naming.NameAlreadyBoundException]
      at org.jboss.ejb3.stateless.BaseStatelessProxyFactory.start(BaseStatelessProxyFactory.java:70)
      at org.jboss.ejb3.stateless.StatelessLocalProxyFactory.start(StatelessLocalProxyFactory.java:63)
      at org.jboss.ejb3.ProxyDeployer.start(ProxyDeployer.java:107)
      at org.jboss.ejb3.SessionContainer.start(SessionContainer.java:85)
      at org.jboss.ejb3.stateless.StatelessContainer.start(StatelessContainer.java:80)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:55)
      at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:107)
      at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
      at org.jboss.kernel.plugins.dependency.KernelControllerContextActions.dispatchJoinPoint(KernelControllerContextActions.java:100)
      at org.jboss.kernel.plugins.dependency.KernelControllerContextActions$LifecycleAction.installAction(KernelControllerContextActions.java:582)
      at org.jboss.kernel.plugins.dependency.KernelControllerContextActions$KernelControllerContextAction.install(KernelControllerContextActions.java:175)
      at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
      at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:226)
      at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:593)
      at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:346)
      at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:438)
      at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:379)
      at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:225)
      at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:151)
      at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:79)
      at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:73)
      at org.jboss.ejb3.MCKernelAbstraction.install(MCKernelAbstraction.java:91)
      at org.jboss.ejb3.Ejb3Deployment.registerEJBContainer(Ejb3Deployment.java:439)
      at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:486)
      at org.jboss.ejb3.embedded.EJB3StandaloneDeployer.start(EJB3StandaloneDeployer.java:460)
      at org.jboss.seam.core.Ejb.startup(Ejb.java:56)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.jboss.seam.util.Reflections.invoke(Reflections.java:20)
      at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:123)
      at org.jboss.seam.Component.callComponentMethod(Component.java:1834)
      at org.jboss.seam.Component.callCreateMethod(Component.java:1757)
      at org.jboss.seam.Component.newInstance(Component.java:1746)
      at org.jboss.seam.contexts.Lifecycle.startup(Lifecycle.java:175)
      at org.jboss.seam.contexts.Lifecycle.endInitialization(Lifecycle.java:145)
      at org.jboss.seam.init.Initialization.init(Initialization.java:504)
      at org.jboss.seam.mock.SeamTest.init(SeamTest.java:701)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:604)
      at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:394)
      at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
      at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:79)
      at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:165)
      at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:103)
      at org.testng.TestRunner.runWorkers(TestRunner.java:678)
      at org.testng.TestRunner.privateRun(TestRunner.java:624)
      at org.testng.TestRunner.run(TestRunner.java:495)
      at org.testng.SuiteRunner.runTest(SuiteRunner.java:300)
      at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:295)
      at org.testng.SuiteRunner.privateRun(SuiteRunner.java:275)
      at org.testng.SuiteRunner.run(SuiteRunner.java:190)
      at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:792)
      at org.testng.TestNG.runSuitesLocally(TestNG.java:765)
      at org.testng.TestNG.run(TestNG.java:699)
      at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
      at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:122)
      Caused by: javax.naming.NameAlreadyBoundException
      at org.jnp.server.NamingServer.bind(NamingServer.java:144)
      at org.jnp.server.NamingServer.bind(NamingServer.java:109)
      at org.jnp.interfaces.NamingContext.bind(NamingContext.java:567)
      at org.jnp.interfaces.NamingContext.bind(NamingContext.java:532)
      at org.jboss.util.naming.Util.bind(Util.java:102)
      at org.jboss.util.naming.Util.bind(Util.java:89)
      at org.jboss.ejb3.stateless.BaseStatelessProxyFactory.start(BaseStatelessProxyFactory.java:67)
      ... 64 more

      Also, I've tried to initialize EntityManager, like it was showed in a manual, and I had absolutelly another exception.

      When I have tried to start ready unit tests from the examples, I had also some different kind of exceptions, but, seems, they all are caused by the same.

      To show this. Icefaces had during unit testing the following:
      10:23:57,890 WARN [Interpolator] exception interpolating string: New booking: #{booking.id} for #{user.username}
      java.lang.IllegalStateException: No application context active
      at org.jboss.seam.ScopeType.getContext(ScopeType.java:139)
      at org.jboss.seam.Component.getInstance(Component.java:1621)
      at org.jboss.seam.Component.getInstance(Component.java:1599)
      at org.jboss.seam.Component.getInstance(Component.java:1594)
      at org.jboss.seam.core.Expressions.instance(Expressions.java:265)
      at org.jboss.seam.core.Interpolator.interpolateExpressions(Interpolator.java:88)
      at org.jboss.seam.core.Interpolator.interpolate(Interpolator.java:67)
      at org.jboss.seam.log.LogImpl.interpolate(LogImpl.java:142)
      at org.jboss.seam.log.LogImpl.info(LogImpl.java:85)
      at org.jboss.seam.example.booking.HotelBookingAction.confirm(HotelBookingAction.java:99)
      at org.jboss.seam.example.booking.test.BookingUnitTest.testHotelBooking(BookingUnitTest.java:80)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:604)
      at org.testng.internal.Invoker.invokeMethod(Invoker.java:470)
      at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:564)
      at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:830)
      at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
      at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
      at org.testng.TestRunner.runWorkers(TestRunner.java:678)
      at org.testng.TestRunner.privateRun(TestRunner.java:624)
      at org.testng.TestRunner.run(TestRunner.java:495)
      at org.testng.SuiteRunner.runTest(SuiteRunner.java:300)
      at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:295)
      at org.testng.SuiteRunner.privateRun(SuiteRunner.java:275)
      at org.testng.SuiteRunner.run(SuiteRunner.java:190)
      at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:792)
      at org.testng.TestNG.runSuitesLocally(TestNG.java:765)
      at org.testng.TestNG.run(TestNG.java:699)
      at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
      at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:122)

      DVDStore, the following:

      10:26:17,344 WARN [LocalTxDataSource] Destroying connection that could not be successfully matched: org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener@196eed5[state=NORMAL mc=org.jboss.resource.adapter.jdbc.local.LocalManagedConnection@110caf0 handles=0 lastUse=1183364777313 permit=false trackByTx=false mcp=org.jboss.resource.connectionmanager.JBossManagedConnectionPool$OnePool@17b6178 context=org.jboss.resource.connectionmanager.InternalManagedConnectionPool@13c2ac3 xaResource=org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@11b92e6 txSync=null]
      10:26:17,344 WARN [LocalTxDataSource] Throwable while attempting to get a new connection: null
      org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: No Driver class specified!)
      at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:177)
      at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:579)
      at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:247)
      at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:540)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:339)
      at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:301)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:392)
      at org.jboss.resource.adapter.jdbc.local.LocalTxDataSource$ConnectionManagerDelegate.allocateConnection(LocalTxDataSource.java:78)
      at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:88)
      at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69)
      at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:27)
      at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:178)
      at org.hibernate.tool.hbm2ddl.SchemaExport.drop(SchemaExport.java:141)
      at org.hibernate.impl.SessionFactoryImpl.close(SessionFactoryImpl.java:807)
      at org.jbpm.persistence.db.DbPersistenceServiceFactory.close(DbPersistenceServiceFactory.java:120)
      at org.jbpm.JbpmConfiguration.close(JbpmConfiguration.java:460)
      at org.jbpm.JbpmConfiguration.close(JbpmConfiguration.java:437)
      at org.jboss.seam.core.Jbpm.shutdown(Jbpm.java:76)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.jboss.seam.util.Reflections.invoke(Reflections.java:20)
      at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:123)
      at org.jboss.seam.Component.callComponentMethod(Component.java:1834)
      at org.jboss.seam.Component.callDestroyMethod(Component.java:1765)
      at org.jboss.seam.contexts.Contexts.destroy(Contexts.java:231)
      at org.jboss.seam.contexts.Lifecycle.endApplication(Lifecycle.java:185)
      at org.jboss.seam.mock.SeamTest.cleanup(SeamTest.java:709)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:604)
      at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:394)
      at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
      at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:79)
      at org.testng.internal.TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:208)
      at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
      at org.testng.TestRunner.runWorkers(TestRunner.java:678)
      at org.testng.TestRunner.privateRun(TestRunner.java:624)
      at org.testng.TestRunner.run(TestRunner.java:495)
      at org.testng.SuiteRunner.runTest(SuiteRunner.java:300)
      at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:295)
      at org.testng.SuiteRunner.privateRun(SuiteRunner.java:275)
      at org.testng.SuiteRunner.run(SuiteRunner.java:190)
      at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:792)
      at org.testng.TestNG.runSuitesLocally(TestNG.java:765)
      at org.testng.TestNG.run(TestNG.java:699)
      at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
      at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:122)
      Caused by: org.jboss.resource.JBossResourceException: No Driver class specified!
      at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getDriver(LocalManagedConnectionFactory.java:257)
      at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:168)
      ... 50 more