
Тестировщику часто приходится сталкиваться с задачей написания автоматизированных модульных тестов. Особенность данного тестирования, не требуется полной интеграции, так как необходимо проверить на соответствие требованиям отдельные модули. Сторонние модули нам не интересны на данном этапе, и можно замокировать ожидаемые ответы от них. Существует множество подходов к решению этой задачи, от готовых java библиотек и целых фреймворков к примеру mockito, до написания собственной mock заглушки с последующим деплоем на сервере приложений.
Задание:
Написать REST API Web Service на Spring Boot. Реализовать метод GET, который будет возвращать JSON сообщение в ответе и метод POST (с логикой) который на вход принимает JSON сообщение десириализует его и в зависимости от значения параметров отдает необходимый ответ. Стартовать WEB Service и проверить корректность работы.
Использовал:
API RESTFull | Json | Spring Boot |
Для создания проекта удобно воспользоваться Spring Boot Startes:
Для примера POST запрос в формате JSON:
{ "rqUid":"abdfabfa68466a5aef768fadd4223333", "messages":{ "id":"abcd1111abcd1111abcd1111abcd2222", "type":"WAY4-A", "cardNumbers":"4444000022221111" } } |
Добавим немного логики в ответе, если на входящем сообщении cardNumbers = 4***, то в ответе должны получить:
{ "value":"4444000022221111", "statusRule":{ "code":"SUCCESS", "desc":"Успешно обработано" }, "timeout":10 } |
Ну и если cardNumbers != 4***, то в ответе:
{ "value":"4444000022221111", "statusRule":{ "code":"FAIL", "desc":"Сообщение не обработано" }, "timeout":10 } |
Итак в проекте задействовано 2 сообщения в формате JSON. Следующим этапом необходимо описать POJO классы для работы с ними. Для описания POJO использую библиотеки lombok и jackson 2.
import com.fasterxml.jackson.annotation.JsonView; import lombok.Getter; import lombok.Setter; import lombok.ToString; /** * @author Muflikhunov Roman */ @Getter @Setter @ToString public class PhonesByCardNumberRq { @JsonView private String rqUid; @JsonView Messages MessagesObject; } |
Далее создаем класс Controller в котором реализовываем методы работы нашей заглушки.
@RequestMapping(value = "/checkCard", method = RequestMethod.POST) public ResponseEntity checkCard(@RequestBody PhonesByCardNumberRq phonesByCardNumberRq){ PhonesByCardNumberRs phonesByCardNumberRs = new PhonesByCardNumberRs(); phonesByCardNumberRs.setValue(phonesByCardNumberRq.getMessages().getCardNumbers()); StatusRule statusRule = new StatusRule(); statusRule.setCode("FAIL"); statusRule.setDesc("Сообщение не обработано"); phonesByCardNumberRs.setStatusRuleObject(statusRule); phonesByCardNumberRs.setTimeout(10L); if (phonesByCardNumberRq.getMessages().getCardNumbers().matches("^4.*")) { statusRule.setCode("SUCCESS"); statusRule.setDesc("Успешно обработано"); } return new ResponseEntity<>(phonesByCardNumberRs, HttpStatus.OK); } |
Использую класс ResponseEntity который является оберткой для ответа и дополнительно для HTTP заголовков и кода статуса, можно контролировать все, что входит в него: код состояния, заголовки и тело.
Ссылка на полную версию проекта на GitHub:
Github SpringMockWebService