[英]How to test DAOs using hibernate in JUnit4
This seems to be a similar question ( Test DAO in java using Junit4 and Hibernate ), but he's getting the session created successfully. 这似乎是一个类似的问题( 使用Junit4和Hibernate在java中测试DAO ),但他正在成功创建会话。 I'm unable to create the session.
我无法创建会话。
Please note that I'm not using Spring. 请注意,我没有使用Spring。 I just need to test my DAOs which create sessions using HibernateUtil.java
我只需要测试使用HibernateUtil.java创建会话的DAO
My Sample Test Code (in test packages) 我的样本测试代码(在测试包中)
public void testGetBean() {
System.out.println("getBean");
int idaccount = 0;
Account expResult = null;
Account result = DAOAccount.getBean(idaccount);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
//fail("The test case is a prototype.");
}
And here is DAOAccount getBean() (in source packages) 这里是DAOAccount getBean()(在源包中)
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;
}
NewHibernateUtil.java (in source packages) NewHibernateUtil.java(在源包中)
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;
}
}
and here is the stack trace 这是堆栈跟踪
Below is the project structure : 以下是项目结构:
Actual Exception Stacktrace as asked by @Subin @Subin提出的实际异常Stacktrace
[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)
public Configuration configure() throws HibernateException Use the mappings and properties specified in an application resource named hibernate.cfg.xml.
public配置configure()throws HibernateException使用名为hibernate.cfg.xml的应用程序资源中指定的映射和属性。 Throws: HibernateException
抛出:HibernateException
Configuration.configure()
will work correctly only if hibernate.cfg.xml
is available as application resource. 仅当
hibernate.cfg.xml
可用作应用程序资源时, Configuration.configure()
才能正常工作。 or classpath. 或类路径。
If you are using eclipse to invoke your Junit test, add hibernate.cfg.xml to classpath, since you are using maven do you have it in src/main/resources 如果您使用eclipse来调用Junit测试,请将hibernate.cfg.xml添加到classpath,因为您正在使用maven,您是否在src / main / resources中使用它
Please see this link to see, why java.lang.ClassFormatError: happens. 请参阅此链接以了解为什么java.lang.ClassFormatError:发生。 Maven: hibernate-entitymanager together with javaee-api break my unit tests
Maven:hibernate-entitymanager和javaee-api一起打破了我的单元测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.