Мне трудно проводить юнит-тестирование с клиентом Rest.Я пытаюсь смоделировать остальной вызов и вернуть определенный объект, чтобы проверить его значение.Но я получаю java.lang.IllegalArgumentException: URI is not absolute
как ошибку.
Я знаю, что есть способ использовать mockServer
, но я думаю, что это полезно только при тестировании ответов, но не тела.
Я запускаю его с SpringBoot.Вот мой код:
Сервис:
@Service
public class ServiceImpl implements Service {
private final String url;
private RestTemplate restTemplate = new RestTemplate();
public ServiceImpl(@Value("${call.url}") String url) {
this.url = url;
}
@Override
public MyObject getMyObject(String param1, String param2) {
MyObject myObject;
try {
myObject = restTemplate.getForObject(url, MyObject.class, param1, param2);
} catch (HttpClientErrorException e) {
throw new MyObjectException();
}
return myObject;
}
}
Тест:
@InjectMocks
@Spy
private Service service;
MyObject found = mock(MyObject.class);
@Mock
RestTemplate restTemplate;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void() test{
MyObject myObject = new MyObject();
myObject.setField(value);
//Given
Mockito.when(restTemplate.getForObject(
Mockito.anyString(),
ArgumentMatchers.any(Class.class),
Mockito.anyString(),
Mockito.anyString()))
.thenReturn(myObject);
found = service.getMyObject("param1", "param2");
//Then
assertEquals(myObject.getField(), found.getField());
}