2016-09-27 26 views
0

私は1つのコントローラ用のユニットテストを書いて、ここに私のコード注入するネストされた依存関係

public class MyController 
{ 
    @Inject 
    private MyService myService; 

    public List<Car> getCars() 
    { 
     myService.getCars(); 
    } 
} 

public class MyServiceImpl implements MyService 
{ 
    @Inject 
    AService aService; 

    @Inject 
    BService bService; 

    public List<Car> getCars() 
    { 
     aService.getCars(); 
    } 
} 


Public class MyControllerTest 
{ 

    private MockMvc standAloneMockMvc; 

    @InjectMocks 
    MyController myController; 

    @Mock 
    private MyService myService; 

    @Before 
    public void initTestObjs() 
    { 
     MockitoAnnotations.initMocks(this); 

     this.standAloneMockMvc = MockMvcBuilders.standaloneSetup(myController).build(); 

    } 

    @Test 
    public void testGetAllCars() throws Exception 
    { 
     String url = "/car/list"; 

     List<Car> listCars = new ArrayList<Car>(); 
     Car car = new Car(); 
     listCars.add(car); 

     Mockito.when(myService.getCars()).thenReturn(listCars); 

     MvcResult result = standAloneMockMvc.perform(MockMvcRequestBuilders.get(url)) 
     .andDo(MockMvcResultHandlers.print()) 
     .andExpect(MockMvcResultMatchers.status().isOk()) 
     .andReturn(); 

     String jsonResult = result.getResponse().getContentAsString(); 
    } 
} 

でいます私はエラーに直面しています、それはaServiceをロードしようとしたときMyControllerTestでmyServiceというためのBeanを作成すると、 bサービス。

誰でもこれを手助けできますか?誰もが同様の問題に直面した?

スタックトレース:

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.xyz.AService com.xyz.aService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xyz.AService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.inject.Inject()} 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:571) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) 
+1

エラーメッセージを表示できますか?デバッグのために移行が容易になる –

+0

編集された質問、スタックトレースエラーメッセージが追加されました。 – Jaynil

+0

MyControllerTestでAServiceとBServiceのモックを持つ動作を検証しようとしましたか? –

答えて

0

あなたは正確にすべてのモック実装、すなわちを提供する必要があります。あなたのテストクラスは、これらのAService aServiceを把握することができません。 BService bService;あります。

@Mockだから(嘲笑)提示する

をすべてのフィールドを見ていきます、あなたがそれら

のモック実装を提供するモック提供することができます。..

private MockMvc standAloneMockMvc; 

    @InjectMocks 
    MyController myController; 

    @Mock 
    private MyService myService; 

    @Mock 
    AService aService; 

    @Mock 
    BService bService; 

....

関連する問題