如何在 Junit 中模拟微服务

问题描述

我需要运行一个微服务的集成测试,不需要启动依赖的微服务。

下面是我尝试过的方法(我提供了下面类的骨架)

MicroServiceOneController.java

@Autowired
MicroServiceOneservice microServiceOneserviceImpl;

@PostMapping(value = "/saveData/{userEmail}")
public void doHandleSaveData(
  @PathVariable("userEmail") String userEmail) {
    microServiceOneservice.saveData(userEmail);
}

MicroServiceOneserviceImpl.java

@Autowired
MicroServiceTwoProxy microServiceTwoProxy;

@Override
public void saveData(String userEmail){
  DemoDTO dtoObject=microServiceTwoProxy.fetchrequiredData();
  dtoObject.setUserEmail(userEmail);
  // other code to persist dtoObject
}

TestOfMicroServiceOne.java:

@SpringBoottest(webEnvironment = WebEnvironment.RANDOM_PORT)
class TestOfMicroServiceOne{

    @Autowired
    private TestRestTemplate restTemplate;

    @MockBean
    MicroServiceTwoProxy microServiceTwoProxy;
    
    @test
    void test(){
      Mockito.when(microServiceTwoProxy.fetchrequiredData()).thenReturn(new DemoDTO("1","data"));
    
      HttpHeaders headers = new HttpHeaders();
      headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
      httpentity<String> entity = new httpentity<String>(headers);
      ResponseEntity<DemoDTO.class> response = 
       this.restTemplate.exchange("/persist/saveData/{userEmail}",HttpMethod.POST,entity,DemoDTO.class,"user@gmail.com");
      assertEquals(response.getStatusCode(),HttpStatus.OK);
    }

我期望在运行测试时,当 microServiceTwoProxy.fetchrequiredData() 被命中时,它应该返回测试中指定的新 DemoDTO("1","data")。

我希望这个需求在不依赖于 MicroServiceTwo 状态的情况下运行 MicroserviceOne 的测试。

但这似乎不起作用。它期望第二个微服务启动并且测试失败并显示消息 Load balancer does not have available server for client 还有其他可用的方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)