簡體   English   中英

使用基於Java的配置進行Spring 3.2單元測試

[英]Spring 3.2 unit testing with Java based configuration

我將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內聯了CGLIB3。那么為什么我會收到此錯誤?

我使用Gradle 1.3作為構建管理工具,使用STS作為IDE。 當調用gradle eclipse gradle將依賴項拉入兩次:一次作為普通jar,一次作為庫:

首先作為普通罐子: 普通罐

並且比作為庫:

圖書館

在普通jar部分中,我仍然配置了Spring 3.1,而在庫部分中,則配置了Spring 3.2。 因此,我取出了普通的廣口瓶,一切正常。

這是我的項目build.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/"
        }
    }
}

還有來自主項目的build.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
    {
    }
}

我刪除了所有Eclipse項目和設置以及所有Gradle臨時文件。 然后,我嘗試將項目導入Eclipse(Import Gradle項目。)。 這失敗了,但有一個例外。 然后,我刪除了Eclipse項目中的Gradle設置,然后導入成功。

因此,我不會在1.3版中使用gradle eclipse

另外,附加的源集路徑也沒有作為源路徑進入Eclipse項目。

我遇到過同樣的問題。 只需將此依賴項添加到您的pom.xml文件中:

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

而且您的單元測試和運行時代碼應該可以正常工作,而不會出現cglib錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM