有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java控制器单元测试无法自动连接所需的bean

我正在尝试为spring controller编写一个单元测试,myService类在myController中自动连接,我模拟了myService类,但当我调试代码时,它将null

myService=null

我无法为我的控制器注入此服务

   @RunWith(MockitoJUnitRunner.class)
    public class TestManageDevices {

        private MockMvc mockMvc;

        @Mock
        MyService myService;

        @Before
        public void setUp() {
            mockMvc = MockMvcBuilders.standaloneSetup(new MyController())
                    .build();
        }

        @Test
        public void shouldPass() throws Exception {
            Mockito.doNothing().when(myService).someMethod(Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
            JobResponse jobResponse = JobResponse.builder().responseCode(0).build();
            jobResponse.requestObj = "mockedStringObject";

            RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/pathfortest")
                    .contentType(MediaType.APPLICATION_JSON_UTF8)
                    .param("id", Mockito.anyString());

            MvcResult result = mockMvc.perform(requestBuilder).andReturn();


            System.out.println(result.getResponse().getContentAsString());

            MockHttpServletResponse response = result.getResponse();


            Assert.assertEquals(HttpStatus.CREATED.value(), response.getStatus());

        }

    }

共 (1) 个答案

  1. # 1 楼答案

    您正在使用setUp方法中的new MyController()手动更新控制器,因此不会注入依赖项

    创建控制器类型的变量

    @InjectMocks
    MyController myController;      
    

    setUp方法中创建mockMVC实例时使用此选项,如下所示:

    mockMvc = MockMvcBuilders.standaloneSetup(myController).build();
    

    这应该行得通