Как использовать Mockito для RestTemplateBuilder в весенней загрузке

#spring-boot #mockito #spring-resttemplate

Вопрос:

У меня есть потребитель весеннего отдыха, как показано ниже.

В этой услуге нам необходимо использовать другую услугу автоматической передачи.

Как издеваться над ответом за то restTemplate ?

 @Service public class TestConsumer {   private final RestTemplate restTemplate;    @Autowired  private AccountService accountService;    public TestConsumer(RestTemplateBuilder restTemplateBuilder) {  restTemplate = restTemplateBuilder.basicAuthentication("username", "password")  .rootUri("https://example.com").build();  }    public String testGet() {    Account account = accountService.getAccount();  String r = "";  if("Admin".equals(account.getType())) {  r = restTemplate.getForObject("AAA", String.class);  }else {  r = restTemplate.getForObject("BBB", String.class);  }  return r;  } }  

Ответ №1:

Я бы посоветовал вам также создать AccountService аргумент конструктора, чтобы упростить тестирование вашего класса:

 @Service public class TestConsumer {   private final RestTemplate restTemplate;    private AccountService accountService;    public TestConsumer(RestTemplateBuilder restTemplateBuilder, AccountService accountService) {  restTemplate = restTemplateBuilder.basicAuthentication("username", "password")  .rootUri("https://example.com").build();  this.accountService = accountService;  }    public String testGet() {    Account account = accountService.getAccount();  String r = "";  if("Admin".equals(account.getType())) {  r = restTemplate.getForObject("AAA", String.class);  }else {  r = restTemplate.getForObject("BBB", String.class);  }  return r;  } }   

Тогда я бы высмеял и RestTemplateBuilder то и другое и RestTemplate следующим образом:

 public class TestConsumerTest {   @Mock  private RestTemplate restTemplate;   @Mock  private RestTemplateBuilder restTemplateBuilder;   @Mock  private AccountService accountService;   private TestConsumer testConsumer;   @BeforeEach  public void setUp() {  MockitoAnnotations.initMocks(this);   // Mock RestTemplateBuilder behaviour  doReturn(this.restTemplateBuilder).when(this.restTemplateBuilder).basicAuthentication(anyString(), anyString());  doReturn(this.restTemplateBuilder).when(this.restTemplateBuilder).rootUri(anyString());  doReturn(this.restTemplate).when(this.restTemplateBuilder).build();   // Mock RestTemplate behaviour  doReturn("whatever-string").when(this.restTemplate).getForObject(eq("AAA"), eq(String.class));  doReturn("whatever-another-string").when(this.restTemplate).getForObject(eq("BBB"), eq(String.class));    this.testConsumer = new TestConsumer(restTemplateBuilder, accountService);  }   // Your tests }