2015-01-06 58 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/ –