2015-01-06 95 views
1

春天開機測試類我使用下面的依賴不會注入豆

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 
apply plugin: 'war' 

compile("com.caucho:resin-hessian:4.0.23") 
    compile("mysql:mysql-connector-java") 
    compile('org.springframework.boot:spring-boot-starter-web:1.2.0.RELEASE') 
    compile("org.springframework.boot:spring-boot-starter-batch:1.2.0.RELEASE") 
    compile("org.springframework.boot:spring-boot-starter-actuator") 
    compile("javax.inject:javax.inject:1") 
    compile('org.springframework.batch:spring-batch-admin-manager:1.3.0.RELEASE') { 
     exclude module: 'slf4j-log4j12' 
    } 
    //SI 
    compile("org.springframework.integration:spring-integration-core:$springIntegrationVersion") 
    testCompile('org.springframework.boot:spring-boot-starter-test:1.2.0.RELEASE') 

創建新的測試類:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 
@IntegrationTest 
@ContextConfiguration(locations={"classpath:**/*.xml"}) 
@ComponentScan({"com.mycompany.notification.processor.service"}) 
public class DownloadFileTaskletTest { 

    @Autowired 
    private DownloadFileTasklet downloadFileTasklet; 

    @Test 
    public void execute() 
    { 
     System.out.printf("test123"); 

    } 
} 

我創建春天開機 內部測試情況,但是我得到這個錯誤:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'batch.DownloadFileTaskletTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.mycompany.notification.processor.service.batch.tasks.DownloadFileTasklet batch.DownloadFileTaskletTest.downloadFileTasklet; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mycompany.notification.processor.service.batch.tasks.DownloadFileTasklet] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

這是我的應用程序類:

@ComponentScan({"com.mycompany.notification.processor.service"}) 
@EnableAutoConfiguration 
@Configuration 
@ImportResource({ 
     "classpath:integration-context.xml","classpath:launch-context.xml","classpath:applicationContext-NotificationProcessorService.xml" 
}) 
//@Import({ ServletConfiguration.class, WebappConfiguration.class }) 
public class Application { 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
     System.out.printf("hello man"); 
    } 

} 

任何想法,爲什麼我不能將bean注入我的測試類?

我刪除@ ContextConfiguration,@ ComponentScan,@ IntegrationTes的建議 現在我看到不同的異常:

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122) 
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:160) 
    at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:101) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 
Caused by: java.lang.IllegalArgumentException: Cannot load an ApplicationContext with a NULL 'contextLoader'. Consider annotating your test class with @ContextConfiguration or @ContextHierarchy. 
    at org.springframework.util.Assert.notNull(Assert.java:112) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:57) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) 
    ... 28 more 
+0

對於初學者,您可以從您的移除'@ ContextConfiguration'和'@ ComponentScan'測試類,那些沒有意義。另外'@ IntegrationTest'服務於不同的目的,所以我希望你不需要這個。 –

+0

完成。我編輯了我的問題,並添加了新的異常 – rayman

+0

請注意,我有我需要加載的資源中的serverl applicationContext – rayman

回答

8

只是刪除這一部分:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-test</artifactId> 
    <version>3.2.13.RELEASE</version> 
</dependency> 

相反,使用這樣的:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
+0

這是我在學習本教程後需要的解決方案:http://spring.io/guides/tutorials/bookmarks/ –