Java 如何在JUnit4中使用hibernate测试DAOs
这似乎是一个类似的问题(),但他正在成功创建会话。我无法创建会话 请注意,我没有使用Spring。我只需要测试使用HibernateUtil.java创建会话的DAO 我的示例测试代码(在测试包中) 下面是daoccount getBean()(在源代码包中) NewHibernateUtil.java(在源代码包中) 这是堆栈跟踪 项目结构如下: @Subin请求的实际异常堆栈跟踪Java 如何在JUnit4中使用hibernate测试DAOs,java,hibernate,junit4,Java,Hibernate,Junit4,这似乎是一个类似的问题(),但他正在成功创建会话。我无法创建会话 请注意,我没有使用Spring。我只需要测试使用HibernateUtil.java创建会话的DAO 我的示例测试代码(在测试包中) 下面是daoccount getBean()(在源代码包中) NewHibernateUtil.java(在源代码包中) 这是堆栈跟踪 项目结构如下: @Subin请求的实际异常堆栈跟踪 [2012-12-29 16:36:24.347] [ INFO] Configuration.applyHi
[2012-12-29 16:36:24.347] [ INFO] Configuration.applyHibernateValidatorLegacyConstraintsOnDDL:1646 - Hibernate Validator not found: ignoring
Initial SessionFactory creation failed.java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:170)
at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL(BeanValidationActivator.java:103)
at org.hibernate.cfg.Configuration.applyBeanValidationConstraintsOnDDL(Configuration.java:1674)
at org.hibernate.cfg.Configuration.applyConstraintsToDDL(Configuration.java:1624)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1415)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1826)
at dao.NewHibernateUtil.<clinit>(NewHibernateUtil.java:25)
at dao.DAOAccount.getAccounts(DAOAccount.java:77)
at dao.DAOAccountTest.testGetAccounts_User(DAOAccountTest.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:255)
at junit.framework.TestSuite.run(TestSuite.java:250)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
[2012-12-29 16:36:24.347][INFO]配置。ApplyHibernateValidatoreGacyStraintsOnddl:1646-找不到Hibernate验证程序:忽略
初始SessionFactory创建失败。java.lang.ClassFormatError:类文件javax/validation/validation中非本机或抽象的方法中缺少代码属性
java.lang.ClassFormatError:类文件javax/validation/validation中非本机或抽象的方法中缺少代码属性
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:615)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
在java.net.URLClassLoader.access$000(URLClassLoader.java:58)
在java.net.URLClassLoader$1.run(URLClassLoader.java:197)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:190)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:306)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:247)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:247)
位于org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:170)
位于org.hibernate.cfg.beanvalidation.BeanValidationActivator.applydl(BeanValidationActivator.java:103)
在org.hibernate.cfg.Configuration.applyBeanValidationConstraintsOnDDL(Configuration.java:1674)上
位于org.hibernate.cfg.Configuration.applyConstraintsToDDL(Configuration.java:1624)
位于org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1415)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1826)
在dao.NewHibernateUtil.(NewHibernateUtil.java:25)
在dao.DAOAccount.getAccounts(DAOAccount.java:77)
在dao.DAOAccountTest.testGetAccounts\u用户处(DAOAccountTest.java:78)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于junit.framework.TestCase.runTest(TestCase.java:176)
位于junit.framework.TestCase.runBare(TestCase.java:141)
位于junit.framework.TestResult$1.protect(TestResult.java:122)
位于junit.framework.TestResult.runProtected(TestResult.java:142)
运行(TestResult.java:125)
运行(TestCase.java:129)
位于junit.framework.TestSuite.runTest(TestSuite.java:255)
运行(TestSuite.java:250)
位于org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
位于org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
位于org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
位于org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
位于org.apache.maven.surefire.surefire.run(surefire.java:177)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
位于org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
公共配置配置()
抛出冬眠异常
使用名为hibernate.cfg.xml的应用程序资源中指定的映射和属性。
抛出:HibernateeException
Configuration.configure()
只有在hibernate.cfg.xml
作为应用程序资源可用时才能正常工作。或类路径
如果您使用eclipse来调用Junit测试,请将hibernate.cfg.xml添加到类路径,因为您使用的是maven,您在src/main/resources中有它吗
请查看此链接,了解java.lang.ClassFormatError:发生的原因。
发布异常trace@Subin我已经编辑了这个问题并添加了异常跟踪。请看我的答案,在类路径中是hibernate.cfg.xml。?使用ex.printStackTrace()记录实际异常我正在使用Netbeans 6.9调用测试,是的,我在src/main/resources中有配置xml。它是否命名为hibernate.cfg.xml?是的,它的名字是hibernate.cfg.xml。此外,它的工作正常运行的项目完美。只有测试不起作用。我已经编辑了这个问题以显示项目结构。您能记录实际的异常吗
catch(exception ex){//ex.printStackTrace()System.err.println(“初始SessionFactory创建失败。”+ex);抛出新的异常InInitializeRerror(ex);}
使用如图所示的打印堆栈跟踪。我添加了完整的堆栈跟踪。
public static Account getBean(int idaccount) {
Account ac = null;
Session sess = NewHibernateUtil.getSessionFactory().openSession();
Transaction tx = sess.beginTransaction();
Query q = sess.createQuery("from Account where idaccount=:id");
q.setInteger("id", idaccount);
ac = (Account) q.uniqueResult();
tx.commit();
sess.close();
return ac;
}
public class NewHibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
// sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
[2012-12-29 16:36:24.347] [ INFO] Configuration.applyHibernateValidatorLegacyConstraintsOnDDL:1646 - Hibernate Validator not found: ignoring
Initial SessionFactory creation failed.java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:170)
at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL(BeanValidationActivator.java:103)
at org.hibernate.cfg.Configuration.applyBeanValidationConstraintsOnDDL(Configuration.java:1674)
at org.hibernate.cfg.Configuration.applyConstraintsToDDL(Configuration.java:1624)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1415)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1826)
at dao.NewHibernateUtil.<clinit>(NewHibernateUtil.java:25)
at dao.DAOAccount.getAccounts(DAOAccount.java:77)
at dao.DAOAccountTest.testGetAccounts_User(DAOAccountTest.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:255)
at junit.framework.TestSuite.run(TestSuite.java:250)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)