控制器 class 中模拟的服务层正在执行实际的方法实现
Service layer mocked in controller class is executing actual method implementation
在为控制器 class 编写单元测试用例时,我将服务层调用模拟为 return 所需的值,但它 return 为空。
测试class
@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());
}
控制器Class
@PostMapping("/assign")
public RestResponse assignTag(@RequestBody final TagAssociation
tagAssociation) {
final TagResponses serviceResponse =
this.service.associateTag(tagOrderAssociation, null);
serviceResponse 始终为 null,我期待枚举响应 Responses.SUCCESS
堆栈跟踪
testException = org.springframework.web.util.NestedServletException: 请求处理失败;嵌套异常是 java.lang.NullPointerException
服务层有许多自动装配的依赖项。
我也需要嘲笑它吗?
无法找出失败的确切原因。
当您在存根时使用匹配器时,您必须将它们用于所有输入参数。所以尝试:
when(this.serviceMock.associateTag(Mockito.any(Request.class), Mockito.eq(null)))
如果您想进一步阅读,我在 Mockito Stubbing
上写了这篇文章
在为控制器 class 编写单元测试用例时,我将服务层调用模拟为 return 所需的值,但它 return 为空。
测试class
@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());
}
控制器Class
@PostMapping("/assign")
public RestResponse assignTag(@RequestBody final TagAssociation
tagAssociation) {
final TagResponses serviceResponse =
this.service.associateTag(tagOrderAssociation, null);
serviceResponse 始终为 null,我期待枚举响应 Responses.SUCCESS
堆栈跟踪
testException = org.springframework.web.util.NestedServletException: 请求处理失败;嵌套异常是 java.lang.NullPointerException
服务层有许多自动装配的依赖项。 我也需要嘲笑它吗? 无法找出失败的确切原因。
当您在存根时使用匹配器时,您必须将它们用于所有输入参数。所以尝试:
when(this.serviceMock.associateTag(Mockito.any(Request.class), Mockito.eq(null)))
如果您想进一步阅读,我在 Mockito Stubbing
上写了这篇文章