Проверка должна идти после вызова производственного кода, в вашем случае вызов createLead()
.Вы также захотите использовать совпадения для вашего когда звоните, что, вероятно, не следует закомментировать.В таких случаях, как ваш, вам, как правило, не нужны ни когда, ни проверка.Это только делает тест более сложным и трудным для чтения.
Я использую проверку, если нет возврата от сервисного вызова, на котором я могу утверждать.В этих случаях я бы обернул все параметры оператора when (если необходимо обойти исключение нулевого указателя или другую ошибку) в any (), например, any(HttpEntity.class)
или anyString()
, чтобы параметры не были неоднозначными.Затем вы можете использовать команду проверки для подтверждения того, что фактические параметры верны.Эту стратегию легче поддерживать.К сожалению, часто требуется захватчик аргументов для проверки правильности отправки заголовков или других параметров.Я говорю, что это неудачно, потому что тесты становятся большими и грязными,
Если я могу утверждать результат, я часто просто использую когда.В этом случае я бы обернул параметры с eq()
, например eq(httpEntity)
.В этом случае класс HttpEntity должен иметь хороший метод .equals()
, или он будет просто использовать значение по умолчанию и, вероятно, не очень полезен.Но, как правило, это довольно мощный.
Вы не должны использовать @InjectMocks
и инициализировать в настройках.Если вы @InjectMocks
он создает экземпляр и внедряет макеты.Вы, кажется, хотите поставить реальный конфиг, чтобы использовать метод настройки или смоделировать конфиг.Я использовал правильное сопоставление, но вам, возможно, придется его уточнить, например, переключите any()
на eq()
, чтобы действительно проверить то, что вы хотите проверить.Я также изменил порядок, так что действие или вызов производственного вызова перед проверкой.Этот тест должен помочь вам начать.
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ForceServiceTest {
private ForceService forceService;
@Mock
private RestTemplate restTemplate;
@Before
public void setup() {
forceService = new ForceService(new ForceServiceConfig(), restTemplate);
}
@Test
public void createTest_valid() throws Exception {
when(restTemplate.exchange(anyString(), eq(HttpMethod.POST),
any(HttpEntity.class),
eq(CreateRecordResult.class)))
.thenReturn(new ResponseEntity<>(new CreateRecordResult(), HttpStatus.CREATED));
forceService.createLead();
verify(restTemplate, times(1))
.exchange(eq("config.restUrl/vconfig.restVersion/sobjects/Lead/"),
any(HttpMethod.class),
any(HttpEntity.class),
eq(CreateRecordResult.class));
}
}