Весна 3.2 модульное тестирование с конфигурацией на основе Java


Я использую Spring 3.2 с конфигурацией на основе Java и имею некоторые проблемы с моими модульными тестами (JUnit 4.8.1). Итак, это тестовый бегун:

 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(classes={TestConfig.class})
 public class ManualTest
 {
     @Autowired
     ...

Однако, я получаю эту ошибку:

Caused by: java.lang.IllegalStateException: CGLIB is required to process @Configuration classes. Either add CGLIB to the classpath or remove the following @Configuration bean definitions: [testConfig]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:327)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:222)

Как говорится в блоге Spring, Spring 3.2 является встроенным CGLIB 3. Так почему же я получаю эту ошибку?

Я использую Gradle 1.3 в качестве инструмента управления сборкой и STS в качестве IDE. При вызове gradle eclipse gradle вытаскивает зависимости дважды: один раз как обычный jar и один раз как библиотека:

Сначала как обычная банка: простая банка

А чем же библиотека:

библиотека

В секции plain jar у меня все еще была настроена Spring 3.1, в то время как в секции library была Spring 3.2. Поэтому я убрал простые банки, и все заработало.

Это мой проект сборки.gradle

configurations
{
    driver
}

dependencies
{
    driver 'com.oracle:ojdbc6:11.2.0'

    compile "org.springframework:spring-jdbc:$springVersion"

    testCompile 'com.oracle:ojdbc6:11.2.0'
    testCompile "org.springframework:spring-test:$springVersion"
    testCompile "commons-dbcp:commons-dbcp:$dbcpVersion"
    testCompile "junit:junit:$junitVersion"
    testCompile "org.slf4j:slf4j-log4j12:$slf4jVersion"
}

sourceSets 
{
    main
    {
        java
        {
            srcDirs 'src/main/java', "$buildDir/generated-sources/"
        }
    }
}

И сборка.gradle из мастер-проекта

configure(allprojects)
{
    ext.dbcpVersion = '1.4'
    ext.springVersion  = '3.2.0.RELEASE'
    ext.junitVersion  = '4.8.1'
    ext.slf4jVersion = '1.7.2' 
}

subprojects
{
    // Artifact settings
    group = 'xxx'
    version = '1.0-SNAPSHOT'

    // Standard plugins
    apply plugin: 'java'
    apply plugin: 'eclipse'

    // Repositories
    repositories
    {
        mavenLocal()
        maven
        {
            url "http://repo.springsource.org/release"
        }
        mavenCentral()
    }

    // Standard dependencies
    dependencies
    {
    }
}
2 8

2 ответа:

Я удалил все проекты и настройки Eclipse, а также все временные файлы Gradle. Затем я попытался импортировать проект в Eclipse (Import Gradle project..). Это не удалось с исключением. Затем я удалил настройки Gradle в проекте Eclipse, и после этого импорт работал.

Поэтому я не буду использовать gradle eclipse с версией 1.3.

Кроме того, дополнительный путь набора исходных данных не попал в проект Eclipse в качестве исходного пути.

У меня была та же проблема. Просто добавьте эту зависимость В пом.xml-файл:

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

И ваши модульные тесты и код времени выполнения должны работать правильно без ошибок cglib.