2012-12-29 36 views
3

這似乎是一個類似的問題(Test DAO in java using Junit4 and Hibernate),但他正在成功創建會話。我無法創建會話。如何在JUnit4中使用休眠測試DAO

請注意,我沒有使用Spring。我只需要測試自己的DAO其創建使用HibernateUtil.java

我的樣品測試代碼(測試包)

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."); 
} 

會議這裏是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(源包)

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; 
} 
} 

,這裏是堆棧跟蹤enter image description here

下面是項目結構:

enter image description here

實際的異常堆棧跟蹤的要求由@Subin

[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) 
+0

發佈異常跟蹤 – Subin

+0

@Subin我編輯了問題並添加了異常跟蹤。 –

+0

請看我的回答,是classpath中的hibernate.cfg.xml。 – Subin

回答

1

public Configuration configure() throws HibernateException Use the mappings and properties specified in an application resource named hibernate.cfg.xml. Throws: HibernateException

Configuration.configure()將正常工作只有hibernate.cfg.xml可作爲應用程序資源。或類路徑。

如果您正在使用Eclipse來調用JUnit測試,加上hibernate.cfg.xml的類路徑,因爲你正在使用maven你有它的src/main /資源

請參閱此鏈接查看,爲什麼java.lang.ClassFormatError:發生。 Maven: hibernate-entitymanager together with javaee-api break my unit tests

+0

記錄實際異常我使用Netbeans 6.9來調用測試,是的,我在src/main/resources中配置了xml。 –

+0

它是否被命名爲hibernate.cfg.xml? – Subin

+0

是的,它被命名爲hibernate.cfg.xml。 此外,它正在正常運行該項目的工作完美。只有測試不起作用。 我編輯了問題以顯示項目結構。 –