Я хочу подробно описать шаги, которые Я пытаюсь использовать при создании новой конечной точки в бэкэнд-проекте (Java, SpringBoot, Mockito). Определенно, это не одно и то же все время, но это не тема для этого поста.
Задача состоит в том, чтобы внедрить новую конечную точку, которая извлекает все продукты, существующие на данный момент.
Шаги:
- создайте новый метод в классе службы, который извлекает данные с помощью слоя сохранения( здесь запросы не разрешены) все доступные продукты
- создайте конечную точку, которая вызывает описанный выше метод службы и возвращает данные
- создайте модульный тест для метода обслуживания
- создайте интеграционный тест для новой конечной точки.
Это мой способ тестирования, вы можете смешивать точки, как вам нравится.
Мы разделяем уровни сохранения (VendorProductRepository) и бизнеса (vendorproductservice).
public ListfindAllProducts() { return getVendorProductsRepository().findAll(); }
Это фактическая конечная точка, которая в данном случае имеет одну строку. Он просто возвращает результат вызова службы.
@GetMapping("/")
public ResponseEntity> getAllProducts() {
return ResponseEntity.ok(vendorProductsService.findAllProducts());
}
Этот модульный тест описывает “дано” – “когда” – “тогда”. Мы создаем фиктивный объект, который добавляем в список. Данная часть – это когда мы описываем (заглушка), что будет делать код, когда репозиторию будет предложено вернуть все продукты. Часть “когда” – это когда мы вызываем метод обслуживания, а часть “затем” – это когда мы проверяем, что издевательский вызов службы возвращает первоначально заданный список.
@Test
public void findAllProducts_always_returns_all_existing_products() {
List productList = new ArrayList<>();
productList.add(EntityHelper.convertToAbstractEntity(vendorProductDto, VendorProduct.class));
when(repository.findAll()).thenReturn(productList);
List foundProducts = subject.findAllProducts();
assertNotNull(foundProducts);
assertEquals(foundProducts.size(), productList.size());
}
Этот интеграционный тест описывает правильный путь для получения списка всех доступных продуктов. Он попадает в базу данных, поэтому лучше всего использовать его версию для разработчиков. Мы выполняем Http-вызов и проверяем ответ и тело HttpStatus.
@Test
public void testGetAllProducts_shouldReturn_list_of_existing_products() {
VendorProduct vendorProduct = new VendorProduct();
vendorProduct.setId(1L);
vendorProduct.setName("Mint Plants will be deleted");
vendorProduct.setMinQuantityPerOrder(3d);
vendorProduct.setMaxQuantityPerOrder(100d);
vendorProduct.setQuantityType(QuantityType.ITEM.getIndex());
List existingProducts = new ArrayList<>();
existingProducts.add(vendorProduct);
ResponseEntity getResponse = getRestTemplate().getForEntity(getRootUrl() + "/products/", List.class);
assertEquals(HttpStatus.OK, getResponse.getStatusCode());
assertEquals(existingProducts, getResponse.getBody());
}
Именно тогда я чувствую себя более уверенным в том, что добавление новой конечной точки для выполнения чего-либо действительно сработает. Этот код на самом деле является частью моего проекта #twiliohackathon, поэтому код доступен здесь https://github.com/gabrielaradu/BuyLocalServerSide
Счастливого кодирования.
Оригинал: “https://dev.to/gabriela/new-endpoint-from-start-to-test-3n9f”