2011-01-28 3 views
4

J'ai essayé de créer un test JUnit pour mon DAO qui utilise Hibernate et est lié à la base de données via Spring dans mon fichier applicationContext.xml.Comment faire pour que les annotations JUnit4 fonctionnent dans Spring2.5?

L'erreur ne se produit que lors de l'ajout:

@RunWith(SpringJUnit4ClassRunner.class) 

Sinon, je reçois une exception de pointeur NULL à la partDao, qui est prévu, car il n'est pas la liaison.

Normalement, je dirais juste de l'abandonner et continuer à développer sans tests JUnit, mais je préférerais commencer à l'utiliser dans mes projets.

Voici l'erreur:

Testsuite: SpecBuilder.webapp.dao.PartDaoTest 
Exception in thread "main" java.lang.NoSuchMethodError: org.junit.runner.notification.RunNotifier.testAborted(Lorg/junit/runner/Description;Ljava/lang/Throwable;)V 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:146) 
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:59) 
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:52) 
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34) 
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) 
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:50) 
    at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:515) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1031) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:888) 
Test SpecBuilder.webapp.dao.PartDaoTest FAILED (crashed) 
/home/zclark/Projects/SpecBuilder/nbproject/build-impl.xml:798: Some tests failed; see details above. 
BUILD FAILED (total time: 2 seconds) 

Voici ma classe de test:

package SpecBuilder.webapp.dao; 

import org.junit.Test; 
import static org.junit.Assert.*; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.junit.runner.RunWith; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.test.context.ContextConfiguration; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="{applicationContext.xml}") 
public class PartDaoTest { 

    @Autowired 
    PartDao partDao; 

    public PartDaoTest() {} 

    @Test 
    public void autowireTest() { 
     assertNotNull(partDao); 
    } 
} 

Et voici mon applicationContext:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 

    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="/WEB-INF/specbuilder.properties"/> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.url}" 
     p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 

    <bean id="partDao" class="SpecBuilder.webapp.dao.PartDao"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="annotatedClasses"> 
      <list> 
       <value>SpecBuilder.webapp.model.Part</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      </props> 
     </property> 
    </bean> 

</beans> 

Toutes les idées?

Répondre

6

Il semble que vous ayez besoin de JUnit 4.3 ou 4.4 pour fonctionner avec Spring 2.5.

+0

Merci. Était trop aveugle pour regarder ça. Est-ce qu'un peu plus d'espionnage, https://jira.springframework.org/browse/SPR-5145 décrit la cause exacte de l'incompatibilité – zclark

Questions connexes