关于单元测试的问题,小弟新接触
Seto
2007-08-18
运行测试,显示local server not initialized怎么解决,之前一直没用TDD,写出来的代码质量好低。。我现在终于下定决心搞Seam的单元测试,没想到一测试就这样子的错误。。testng的classpath为mc的conf,ejb3 all的包
ResourceTest.java public class ResourceTest { @Test public void testResource() { EntityManager em = getEntityManagerFactory().createEntityManager(); em.getTransaction().begin(); Resource temp = new Resource(); temp.setTag("test"); temp.setName("test"); temp.setUrl("test"); em.persist(temp); assert "test".equals( temp.getTag()); assert "test".equals( temp.getName()); assert "test".equals( temp.getUrl()); assert temp.getId()!=null; em.getTransaction().commit(); em.close(); } private EntityManagerFactory emf; public EntityManagerFactory getEntityManagerFactory() { return emf; } @Configuration(beforeTestClass=true) public void init() { emf = Persistence.createEntityManagerFactory("KDC"); } @Configuration(afterTestClass=true) public void destroy() { emf.close(); } } persistence.xml <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="KDC"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/KDCDatasource</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="${hibernate.hbm2ddl.auto}"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/> </properties> </persistence-unit> </persistence> KDC-ds.xml <?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>KDCDatasource</jndi-name> <connection-url>jdbc:mysql://localhost:3306/test</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password>test</password> <!-- <exception-sorter-class-name> org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter </exception-sorter-class-name> <metadata> <type-mapping>mySQL</type-mapping> </metadata> --> </local-tx-datasource> </datasources> console 02:53:33,578 ERROR [NamingHelper] Could not obtain initial context javax.naming.NamingException: Local server is not initialized at org.jnp.interfaces.LocalOnlyContextFactory.getInitialContext(LocalOnlyContextFactory.java:45) at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.init(Unknown Source) at javax.naming.InitialContext.<init>(Unknown Source) at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28) at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52) at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:713) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at com.domain.KDC.test.ResourceTest.init(ResourceTest.java:47) 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) 02:53:33,578 FATAL [DatasourceConnectionProvider] Could not find datasource: java:/KDCDatasource javax.naming.NamingException: Local server is not initialized at org.jnp.interfaces.LocalOnlyContextFactory.getInitialContext(LocalOnlyContextFactory.java:45) at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.init(Unknown Source) at javax.naming.InitialContext.<init>(Unknown Source) at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28) at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52) at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:713) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at com.domain.KDC.test.ResourceTest.init(ResourceTest.java:47) 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) FAILED CONFIGURATION: @BeforeClass init javax.persistence.PersistenceException: org.hibernate.HibernateException: Could not find datasource at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:720) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at com.domain.KDC.test.ResourceTest.init(ResourceTest.java:47) Caused by: org.hibernate.HibernateException: Could not find datasource at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:56) at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:713) ... 26 more Caused by: javax.naming.NamingException: Local server is not initialized at org.jnp.interfaces.LocalOnlyContextFactory.getInitialContext(LocalOnlyContextFactory.java:45) at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.init(Unknown Source) at javax.naming.InitialContext.<init>(Unknown Source) at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28) at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52) ... 32 more ... Removed 22 stack frames |
|
Seto
2007-08-18
谁能给我说说classpath该如何设置才能正常单元测试么?
|
|
zaya
2007-08-20
单元测试里,如果你没有启动jboss,jndi是没有的,所以datasourceye 没有。 如果你想测试数据库,可以把PU配置成连接j2se,而不是jndi.
<persistence-unit name="yourPU" transaction-type="RESOURCE_LOCAL"> 并把jta-data-source 删了。 如果你想用jndi测试,得用jboss-embedded. 推荐做法是用org.jboss.seam.mock.SeamTest,具体看seam手册测试那节。 你目前这种做法,除非是把embedded配置好,然后手动调用 org.jboss.embedded.Bootstrap bootstrap = org.jboss.embedded.Bootstrap.getInstance(); bootstrap.bootstrap(); 启动服务器。 |
|
Seto
2007-08-20
谢谢啊,解决了。。我在官方上找到问题解决方法了。。就跟你说的那样
|
|
xxqn
2007-10-06
容器内测试难呀。
|
|
nbaertuo
2007-10-21
能不能把你做好的单元测试上传一个啊,感觉配置好麻烦啦
|
|
coolfish
2007-12-11
如果要测试的seam组件是pojo的话,那么没有必要启动embedded jboss.
我遇到的问题是,如果将 META-INF/persistence.xml 和 java代码放在一起的话,启动embedded jboss ,错误: Caused by: java.lang.ClassCastException: org.jboss.net.protocol.vfsfile.VirtualFileURLConnection at org.jboss.virtual.plugins.context.VfsArchiveBrowserFactory.create(VfsArchiveBrowserFactory.java:47) at org.jboss.util.file.ArchiveBrowser.getBrowser(ArchiveBrowser.java:63) at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:626) ... 61 more 启动hibernate 扫描持久化类的时候出错.大家有没有碰到类似的错误呢? |
|
tearaskflower
2009-12-16
兄弟,怎么解决的,哪个官网?是testNG吗
|