2017-05-29 12 views
0

私は基本的なSpringBootアプリケーションを持っています。 Spring Initializer、組み込みTomcat、Thymeleafテンプレートエンジン、およびパッケージを実行可能なJARファイルとして使用しています。Spring BootのJunitテストでサービスが挿入されない

私は、このサービスを持っている:

@ContextConfiguration(classes={TdkApplicationConfig.class, TdkDevelopmentConfig.class}) 
@RunWith(SpringRunner.class) 
public class TdkRestApiServiceTests { 


    /** 
    * The object being tested. 
    */ 
    @Autowired 
    TdkRestApiService tdkRestApiService; 

    @Test 
    public void getCallbacksByDeviceTypeTest() throws IOException { 

     tdkRestApiService.getCallbacksByDeviceType("2", "3"); 

    } 
} 

が、私はエラーだ:ここで

ERROR o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframewor[email protected]dd3b207] to prepare test instance [[email protected]] 
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.tdk.backend.service.TdkRestApiServiceTests': Unsatisfied dependency expressed through field 'tdkRestApiService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.tdk.backend.service.TdkRestApiService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:386) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) 

答えて

0

これは私の問題を修正:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = TdkApplication.class) 
public class SigfoxRestApiServiceTests { 
. 
} 
1

@ContextConfiguration 
@RunWith(SpringRunner.class) 
public class TdkRestApiServiceTests { 
を私がテストしたい

@Service 
public class TdkRestApiService { 
    ... 
} 

ContextConfiguration注釈のclasses属性は指定しません。

すべての設定、特にTdkRestApiService beanを設定するルートSpring設定クラスでこの属性を設定する必要があります。たとえば
ルートSpring構成クラスがMyConfigであれば、あなたはそれを指定することができます。

@ContextConfiguration(classes = MyConfig.class) 
@RunWith(SpringRunner.class) 
public class TdkRestApiServiceTests { 

あなたはSpring documentation discussing of detecting test configurationに関する詳細な情報を持つことができます。エキス以下

If you’re familiar with the Spring Test Framework, you may be used to using @ContextConfiguration(classes=…​) in order to specify which Spring @Configuration to load. Alternatively, you might have often used nested @Configuration classes within your test.

関連する問題