繁体   English   中英

Junit 测试用例 Spring 启动 controller 返回 ResponseEntity 中的值 null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM