在基于mock的junit测试类中注入嵌套依赖项



我正在为一个控制器编写单元测试,下面是我的代码

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();
    }
}

我在MyControllerTest中为myService创建bean时遇到错误,当它试图加载aService和bService时。

有谁能帮帮忙吗?还有其他人遇到过类似的问题吗?

异常堆栈

:

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)

您需要提供所有的模拟实现,即。你的测试类无法找出这些AService;BService BService;。

@mock将查看所有要显示(模拟)的字段

因此,您可以为它们提供mock提供mock实现

.

private MockMvc standAloneMockMvc;
    @InjectMocks
    MyController myController;
    @Mock
    private MyService myService;
    @Mock
    AService aService;
    @Mock
    BService bService;

相关内容

  • 没有找到相关文章

最新更新