Модульный тест сервисного класса с макетами с использованием TestNG - PullRequest
0 голосов
/ 20 декабря 2018

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

public class ApiService{
    private RestTemplate restTemplate;

    private ServiceDao serviceDao;


    @Autowired
    public ApiService(RestTemplate restTemplate, ServiceDao serviceDao) {
        this.restTemplate = restTemplate;
        this.serviceDao = serviceDao;
    }

    public ResponseEntity getObject(ObjectRequest request) {
        // Service logic here
    }

    public ResponseEntity postObject(CreateObjectRequest request) {
        // Service logic here
    }
}

Но я борюсь с тем, как смоделировать restTemplate в конструкторе моего класса обслуживания, чтобы при тестированииработает, данные не сохраняются .. Я изучил Mockito, хотя не вижу много примеров или документации относительно Mockito + TestNG в этом контексте.Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я на самом деле сконструировал метод с использованием Mockito следующим образом ... может быть, есть более элегантное решение, поэтому мне было бы интересно посмотреть:

public class ServiceTest {

    @BeforeMethod(groups="serviceTest")
    public void beforeMethod() {
        MockitoAnnotations.initMocks(this);
    }


    @Test(groups="serviceTest")
    public void testGetService_returns200() {
        when(serviceDao.getService(any(String.class), any(RestTemplate.class), any(HttpHeaders.class))).thenReturn(new ResponseEntity(new Object(), HttpStatus.OK));

        ObjectRequest request = new ObjectRequest();
        // set request values
        ResponseEntity testResponse = apiService.getObject(request);

    }
}
0 голосов
/ 20 декабря 2018

Прежде всего - если возможно, введите RestOperations в ваш сервис вместо RestTemplate.Тогда вы сможете легко смоделировать его поведение (примечание: RestTemplate реализует RestOperations).

Если использование RestOperations невозможно - вы можете сделать что-то такое:

RestTemplate myTemplate = Mockito.spy(new RestTemplate());
String expectedOutput = "hello mock";
String inputUrl = "/12428266/modulnyi-test-servisnogo-klassa-s-maketami-s-ispolzovaniem-testng";
Mockito.doReturn(expectedOutput).when(myTemplate).getForObject(inputUrl, String.class);
String result = myTemplate.getForObject(inputUrl, String.class);
Assert.assertEquals(expectedOutput, result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...