【问题标题】:Service layer mocked in controller class is executing actual method implementation在控制器类中模拟的服务层正在执行实际的方法实现
【发布时间】:2019-10-09 08:18:00
【问题描述】:

在为控制器类编写单元测试用例时,我模拟了服务层调用以返回所需的值,但它返回的是 null。

测试类

@RunWith(SpringJUnit4ClassRunner.class)
    public class ControllerTest {

        @Mock
        private Service serviceMock;

        @InjectMocks
        private Controller controller;

        private MockMvc mockMvc;

        /**
         * Sets the up.
         *
         * @throws Exception the exception
         */
        @Before
        public void setUp() throws Exception {
            MockitoAnnotations.initMocks(this);
            mockMvc = 
    MockMvcBuilders.standaloneSetup(controller).build();
        }

        @Test
        public void method1() throws Exception {
            when(this.serviceMock.associateTag(any(Request.class), null))
            .thenReturn(Responses.SUCCESS);
    mockMvc.perform(post("/tag/assign").contentType(MediaType.APPLICATION_JSON).content(request))               .andExpect(MockMvcResultMatchers.status().isOk());
        }

控制器类

@PostMapping("/assign")
public RestResponse assignTag(@RequestBody final TagAssociation 
tagAssociation) {
final TagResponses serviceResponse = 
this.service.associateTag(tagOrderAssociation, null);  

serviceResponse 始终为空,我期待一个枚举响应 Responses.SUCCESS

堆栈跟踪

testException = org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 java.lang.NullPointerException

服务层有许多自动装配的依赖关系。 我还需要嘲笑它吗? 无法找出失败的确切原因。

【问题讨论】:

    标签: java spring-boot mockito junit4 mockmvc


    【解决方案1】:

    当您在存根时使用匹配器时,您必须将它们用于所有输入参数。所以试试:

    when(this.serviceMock.associateTag(Mockito.any(Request.class), Mockito.eq(null)))
    

    如果您想进一步阅读,那么我在Mockito Stubbing 上写了这篇文章

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 2012-09-18
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 2020-01-20
      • 1970-01-01
      相关资源
      最近更新 更多