[英]Spring controller not returning value when not using ResponseEntity
[英]Junit Test case Spring boot controller returning null value in ResponseEntity
在我的项目中,我正在创建一个 rest 端点,它负责使用 grpc 服务响应。 现在我想为 controller class 编写测试用例,但 Junit 测试用例返回我 null null 值。
我的控制器.java
@RestController
@RequestMapping("/v1")
public class MyController {
@Autowired
private MyConsumerService consumer;
public MyController(MyConsumerService consumer) {
this.consumer=consumer;
}
@GetMapping("/data")
public ResponseEntity<Records> getData(@RequestParam("data") String data) {
Records records = consumer.getGrpcResponse(data);
return new ResponseEntity<>(Records, HttpStatus.OK);
}
}
MyConsumerServiceImpl.java:
public class MyConsumerServiceImpl implements MyConsumerService {
@GrpcClient("user-grpc-service")
private userGrpc.userBlockingStub stub;
@Override
public Records getGrpcResponse(data) {
Records records = new Records();
UserRequest request = UserRequest.newBuilder()
.setUserName(data)
.build();
APIResponse response = stub.userRequest(request);
records.setUserName(response.getUserName());
return records;
}
}
我的控制器测试.java:
@ExtendWith(MockitoExtension.class)
public class MyControllerTest {
private MyConsumerService mockerService;
private MyController controller;
@BeforeEach
void setup(){
mockerService = mock(MyConsumerService.class);
controller = new MyController(mockerService);
}
@Test
public void shouldGet(){
final var data="Hello";
when(mockerService.getGrpcResponse(data)).thenReturn(new Records());
final var responseEntity=controller.getData(data);
assertEquals(responseEntity.getBody(),new Records());
}
}
responseEntity.getBody()
正在返回null
。
正常流程工作正常但 Junit 当我 mocking 客户端服务调用时,它返回null
。
我很困惑为什么它总是返回null
。 知道我哪里出错了。
您还没有为 service.getData() 添加 when then 语句,并且没有在任何地方调用下面的存根
when(mockerService.getGrpcResponse(data)).thenReturn(new Records());
使用 when then 像这样模拟 service.getData() ,
when(mockerService.getData(data)).thenReturn(new Records());
用@WebMvcTest(MyController.class) 注释这个'MyControllerTest' class 并且重新运行它将工作,否则它无法模拟实际的controller class。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.