Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Завдання: Модульне Тестування | Тестування Бекенд-Додатків
Spring Boot Backend

bookЗавдання: Модульне Тестування

Завдання

Ми наближаємося до завершення цього курсу, і для підсумку нашого додатку пропоную вам завершити написання всіх модульних тестів для шарів контролера та сервісу.

Пояснення завдання

Необхідно протестувати всі методи у шарах контролера та сервісу, для яких ще не написані тести. Для цього рекомендую використовувати JUnit разом із бібліотекою Mockito.

Рекомендації щодо написання тестів у JUnit

Ось деякі ключові методи, які стануть у пригоді:

assertNotNull(result): Перевіряє, що результат виклику методу не є null, підтверджуючи успішність операції;

assertEquals(expected, actual): Порівнює очікуване значення з фактичним, щоб переконатися, що повертаються коректні дані;

assertTrue(condition): Перевіряє, що умова істинна, наприклад, що список книг є порожнім, якщо у базі даних немає записів;

verify(mock).methodCall(): Перевіряє, що певний метод на макеті був викликаний із очікуваними параметрами, підтверджуючи взаємодію між компонентами;

when(mock.methodCall()).thenReturn(value): Налаштовує макет повертати певне значення при виклику методу, імітуючи залежності у ваших тестах.

Тестування контролера

Тут вже написані тести для методів findAllBooks, findByAuthor, createBook та updateBook. Необхідно написати тести для решти методу. Нижче наведено поради, які допоможуть реалізувати тест для цього методу.

deleteBooks(String id)

Для методу deleteBooks(String id) потрібно перевірити, що метод видалення викликається з правильним id, а також протестувати обробку помилок при спробі видалити неіснуючу книгу. Для успішної відповіді перевіряється лише статус; для помилок перевіряються і статус, і повідомлення про помилку.

BookService.java

BookService.java

copy
1234567
@Transactional public void deleteBook(String id) { if(!bookRepository.existsById(id)) { throw new ApiException("Not found by id: " + id, HttpStatus.NOT_FOUND); } bookRepository.deleteById(id); }

Для контролера необхідно написати два тести для цього методу: один для успішного видалення та інший для випадку, коли 404 status повертається.

Зверніть увагу, що метод сервісу, який ми будемо мокати, не повертає нічого, так само як і контролер.

Ви можете використати doNothing() метод для підстановки void методу, щоб переконатися, що жодних дій не виконується при його виклику. Синтаксис:

doNothing().when(someService).someVoidMethod();

Коли потрібно обробити ситуацію, у якій виникає виняток, використовуйте doThrow(). Цей метод у Mockito імітує виникнення винятку з void методу. Синтаксис:

doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");

Тестування сервісу

deleteBook(String id)

Метод deleteBook(String id) потребує перевірки, щоб переконатися, що метод видалення книги викликається з правильним id. Додатково важливо перевірити, як метод обробляє ситуацію, коли книга із зазначеним id не знайдена.

Потрібно реалізувати два тести: один, коли сутність знаходиться за id і видаляється, та інший, коли виникає виняток.

Що робити, якщо не вдається написати тести?

Це абсолютно нормально, якщо ви не засвоїли тему з першої спроби; можливо, потрібно ще раз перечитати концепції тестування. Також рекомендую переглянути рішення до цього завдання.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you explain how to write a test for the deleteBook method in the service layer?

What should I focus on when testing the controller's deleteBooks method?

Can you clarify how to use doThrow and doNothing in Mockito for these tests?

Awesome!

Completion rate improved to 3.45

bookЗавдання: Модульне Тестування

Свайпніть щоб показати меню

Завдання

Ми наближаємося до завершення цього курсу, і для підсумку нашого додатку пропоную вам завершити написання всіх модульних тестів для шарів контролера та сервісу.

Пояснення завдання

Необхідно протестувати всі методи у шарах контролера та сервісу, для яких ще не написані тести. Для цього рекомендую використовувати JUnit разом із бібліотекою Mockito.

Рекомендації щодо написання тестів у JUnit

Ось деякі ключові методи, які стануть у пригоді:

assertNotNull(result): Перевіряє, що результат виклику методу не є null, підтверджуючи успішність операції;

assertEquals(expected, actual): Порівнює очікуване значення з фактичним, щоб переконатися, що повертаються коректні дані;

assertTrue(condition): Перевіряє, що умова істинна, наприклад, що список книг є порожнім, якщо у базі даних немає записів;

verify(mock).methodCall(): Перевіряє, що певний метод на макеті був викликаний із очікуваними параметрами, підтверджуючи взаємодію між компонентами;

when(mock.methodCall()).thenReturn(value): Налаштовує макет повертати певне значення при виклику методу, імітуючи залежності у ваших тестах.

Тестування контролера

Тут вже написані тести для методів findAllBooks, findByAuthor, createBook та updateBook. Необхідно написати тести для решти методу. Нижче наведено поради, які допоможуть реалізувати тест для цього методу.

deleteBooks(String id)

Для методу deleteBooks(String id) потрібно перевірити, що метод видалення викликається з правильним id, а також протестувати обробку помилок при спробі видалити неіснуючу книгу. Для успішної відповіді перевіряється лише статус; для помилок перевіряються і статус, і повідомлення про помилку.

BookService.java

BookService.java

copy
1234567
@Transactional public void deleteBook(String id) { if(!bookRepository.existsById(id)) { throw new ApiException("Not found by id: " + id, HttpStatus.NOT_FOUND); } bookRepository.deleteById(id); }

Для контролера необхідно написати два тести для цього методу: один для успішного видалення та інший для випадку, коли 404 status повертається.

Зверніть увагу, що метод сервісу, який ми будемо мокати, не повертає нічого, так само як і контролер.

Ви можете використати doNothing() метод для підстановки void методу, щоб переконатися, що жодних дій не виконується при його виклику. Синтаксис:

doNothing().when(someService).someVoidMethod();

Коли потрібно обробити ситуацію, у якій виникає виняток, використовуйте doThrow(). Цей метод у Mockito імітує виникнення винятку з void методу. Синтаксис:

doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");

Тестування сервісу

deleteBook(String id)

Метод deleteBook(String id) потребує перевірки, щоб переконатися, що метод видалення книги викликається з правильним id. Додатково важливо перевірити, як метод обробляє ситуацію, коли книга із зазначеним id не знайдена.

Потрібно реалізувати два тести: один, коли сутність знаходиться за id і видаляється, та інший, коли виникає виняток.

Що робити, якщо не вдається написати тести?

Це абсолютно нормально, якщо ви не засвоїли тему з першої спроби; можливо, потрібно ще раз перечитати концепції тестування. Також рекомендую переглянути рішення до цього завдання.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 4
some-alt