#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 }