Почему я не могу протестировать свой проект с помощью JUnit 4? - PullRequest
4 голосов
/ 06 января 2012

Я использую Spring 3, Hibernate 3 в моем проекте.Но я не могу проверить его с помощью JUnit 4.

Вот мой класс Test:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:WebRoot/WEB-INF/applicationContext.xml"})
public class UserDaoTestCase extends AbstractJUnit4SpringContextTests {

    @Autowired
    private UserDao userDao;

    @Test
    public void testSimple() {
        // do some tests...
    }



    // setters and getters
    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

}

Я запускаю этот тест и всегда получаю это исключение:

java.lang.IllegalStateException: не удалось загрузить ApplicationContext по адресу org.springframework.test.context.TestContext.getApplicationContext (TestContext.java:308) по адресу org.springframework.test.context.support.DependencyInpeneTenceTecence109) по адресу org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance (DependencyInjectionTestExecutionListener.java:75) по адресу org.springframework.test.context.TestContextManager.prestxt.meg.traf.tg_t_p_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_t_tr_t_t_t_t_t_t_t_t_t_t_p),l.ReflectiveCallable.run (ReflectiveCallable.java:15) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock (SpringJUnit4ClassRunner.java:303) в org.springfunitUntJava: 240) в org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:50) в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:193) в org.junitRunners.(ParentRunner.java:52) в org.junit.runners.ParentRunner.runChildren (ParentRunner.java:191) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:42) в org.junit.Runner.Parent$ 2RunAfterTestClassCallbacks.java:70) в org.junit.runners.ParentRunner.run (ParentRunner.Java: 236) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java:180) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.Unit.Tj.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467lse) .j.j..internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) в org.jtlin.runner.RemoteTestRunner.main (RemoteTestRunner.java:197) Причина: org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем 'sessionFactory', определенным в URL [file: WebRoot / WEB-INF / applicationContext.xml]: Вызов метода init не выполнен;Вложенное исключение: org.hibernate.HibernateException: невозможно получить фабрику проверки компонентов по умолчанию в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.ort.Ab..doCreateBean (AbstractAutowireCapableBeanFactory.java:519) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.291) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetjean.Fean (28)org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:190) в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletAbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:895) по адресу org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:425) по адресу org.springframework.xt.er.teg.textв org.springframework.test.context.support.AbstractGenericContextLoader.loadContext (AbstractGenericContextLoader.java:1) в org.springframework.test.context.TestContext.loadApplicationContext (TestContext.xtxt.tube.jpg):.getApplicationContext (TestContext.java:304) ... еще 24 Причина: org.hibernate.HibernateException: Невозможно получить Bean Va по умолчаниюфабрика lidation по адресу org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL (BeanValidationActivator.java:127) по адресу org.hibernate.cfg.Configuration.applyBeanValidationConstraintsOnDDL (Configuration.java.Conf..java: 1654) в org.hibernate.cfg.Configuration.secondPassCompile (Configuration.java:1445) в org.hibernate.cfg.Configuration.buildMappings (Configuration.java:1375) в org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory (LocalSessionFactoryBean.java:717) при org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet (AbstractSessionFactoryBean.java:211) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1469) в орг.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1409) ... еще 37 Причина: java.lang.reflect.lang.reflect.Method.invoke (Method.java:597) в org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL (BeanValidationActivator.java:118) ... еще 45 Причина: org.hibernate.HibernateException Исключение:ValidatorFactory по умолчанию в org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory (TypeSafeActivator.java:383) в org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDavax.java: ja ....validation.ValidationException: Невозможно создать экземпляр конфигурации.в javax.validation.Validation $ GenericBootstrapImpl.configure (Validation.java:272) в javax.validation.Validation.buildDefaultValidatorFactory (Validation.java:111) в org.hibernate.cfg.beanvalidatoraFid.Fid.Fid.FaFF) ... еще 51 причина: java.lang.NullPointerException в java.util.ResourceBundle.getBundle (ResourceBundle.java:960) в org.hibernate.validator.engine.ResourceBundleMessageInterpolator.loadBundle (ResourceBundle2essj.gt).hibernate.validator.engine.ResourceBundleMessageInterpolator.getFileBasedResourceBundle (ResourceBundleMessageInterpolator.java:182) при org.hibernate.validator.engine.ResourceBundleMessageInterpolator. (ResourceBundleMessageInterpolator.java:81) при org.hibernate.validator.engine.ResourceBundleMessageInterpolator. (ResourceBundleMessageInterpolator.java: 73) в org.hibernate.validator.engine.ConfigurationImpl. (ConfigurationImpl.java:57) вorg.hibernate.validator.HibernateValidator.createGenericConfiguration (HibernateValidator.java:43) в javax.validation.Validation $ GenericBootstrapImpl.configure (Validation.java:269) ... еще 53

101 - это ID 1011MyEclipse 9, и я использую библиотеки JavaEE 6.

Я думаю, что мой applicationContext.xml в порядке, потому что он работает нормально, когда я запускаю этот проект в tomcat, без исключений.

Вотмоего компонента SessionFactory в applicationContext.xml:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="c3p0DataSource" />
    <property name="packagesToScan">
        <list>
            <value>com.myproject.entity</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
             <prop key="hibernate.connection.provider_class">
                 org.hibernate.connection.C3P0ConnectionProvider
              </prop>
              <prop key="hibernate.hbm2ddl.auto">update</prop>
              <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
              <prop key="hibernate.show_sql">true</prop>
              <prop key="hibernate.format_sql">true</prop>
       </props> 
    </property>
</bean>

Как правильно выполнять тесты с использованием JUnit 4?

Ответы [ 5 ]

6 голосов
/ 06 января 2012

Полагаю, вы неправильно указали путь к application-context.xml , как его видит Spring.Сначала я попытался бы сбросить WebRoot / .

Я бы подключил источники Spring к своему проекту и подключил отладчик, ломая на линии:

org.springframework.test.context.TestContext.getApplicationContext (TestContext.java:308)

Там вы увидите, куда он загружает контекст приложения, и можете использовать исполнитель интерактивного выраженияпопробовать несколько разных строк, чтобы выяснить, что он может и не видит.

Я бы тоже попробовал это:

@ContextConfiguration(locations = { "classpath*:applicationContext*.xml" })

Эта работа в моем проекте, где находятся файлы WEB-INF / classes в развертывании.

1 голос
/ 06 января 2012

Действительно ли вы используете свой производственный контекст приложения для тестов?

Я бы изменил подход, чтобы использовать другой контекст приложения для тестов (например, для определения источников данных теста и прочего) и поместить его вместе с другимтестовые ресурсы.Затем выполните простой поиск, как показано ниже.

@ContextConfiguration("/path/to/my/test-context.xml")

В вашем примере вы должны убедиться, что путь правильный!URL вашего файла должен быть переведен в папку относительно корневой папки вашего проекта.Лежит ли там контекст приложения?

0 голосов
/ 07 августа 2015

У меня тоже такая же проблема, когда я обновил и src / test / resources / ApplicationResource.properties и src / main / resources / ApplicationResource.proerties.

И я обновил POM.xml с контекстом и тестовой зависимостью

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${org.springframework-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

src / test / resources / ApplicationContext.xml успешно загружен.

Моя проблема была решена.

0 голосов
/ 05 февраля 2013

У меня тоже была эта проблема, в моем случае проблема была в том, что загружался файл конфигурации xml контекста приложения. Это не был правильно определенный контекст приложения. Чтобы быть точным, "xmlns: context =" http://www.springframework.org/schema/context" пространство имен отсутствует.

0 голосов
/ 06 января 2012
@ContextConfiguration(locations={"file:WebRoot/WEB-INF/applicationContext.xml"})

Я думаю, вы не нашли свой файл конфигурации контекста Spring из файла: //. переместите это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...