In this tutorial, we will learn how to write a JUnit test using the Assertions.assertThrows() method to test exception handling. We will see how to pass a message to the assertThrows() method.
Let's first create a Book, BookService, and BookNotFoundException classes, and then we will write JUnit test cases to test exception handling.
Let's first create a Book, BookService, and BookNotFoundException classes, and then we will write JUnit test cases to test exception handling.
Create Book Class
package junit5.bookstore.model;
public class Book {
private String bookId;
private String title;
private String publisher;
public Book(String bookId, String title, String publisher) {
this.bookId = bookId;
this.title = title;
this.publisher = publisher;
}
public String getBookId() {
return bookId;
}
public void setBookId(String bookId) {
this.bookId = bookId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
}
Create BookNotFoundException Class
package junit5.bookstore.exception;
public class BookNotFoundException extends RuntimeException {
public BookNotFoundException(String message) {
super(message);
}
}
Create BookService Class
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import junit5.bookstore.exception.BookNotFoundException;
import junit5.bookstore.model.Book;
public class BookService {
private List<Book> listOfBooks = new ArrayList<>();
public void addBook(Book book) {
listOfBooks.add(book);
}
public List<Book> books(){
return Collections.unmodifiableList(listOfBooks);
}
public Book getBookById(String bookId) {
for(Book book : listOfBooks) {
if(bookId.equals(book.getBookId())) {
return book;
}
}
return null;
}
public String[] getBookIdsByPublisher(String publisher) {
List<String> bookIds = new ArrayList<>();
for(Book book : listOfBooks) {
if(publisher.equals(book.getPublisher())) {
bookIds.add(book.getBookId());
}
}
return bookIds.toArray(new String[bookIds.size()]);
}
public List<String> getBookTitlesByPublisher(String publisher) {
List<String> bookTitles = new ArrayList<>();
for(Book book : listOfBooks) {
if(publisher.equals(book.getPublisher())) {
bookTitles.add(book.getTitle());
}
}
return bookTitles;
}
public Book getBookByTitle(String title) {
for(Book book : listOfBooks) {
if(title.equals(book.getTitle())) {
return book;
}
}
throw new BookNotFoundException("Book not found in Bookstore!");
}
}
Write JUnit test to use assertTrue() method
The below Java program demonstrates the usage of all overloaded assertThrows() static methods:
package junit5.exception;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
import junit5.bookstore.exception.BookNotFoundException;
import junit5.bookstore.model.Book;
import junit5.bookstore.service.BookService;
public class AssertThrowsDemo {
@Test
public void assertThrowsWithMessage() {
BookService bookService = new BookService();
Book headFirstJavaBook = new Book("1", "Head First Java", "Wrox");
Book headFirstDesignPatternBook = new Book("2", "Head First Design Pattern", "Packt");
bookService.addBook(headFirstJavaBook);
bookService.addBook(headFirstDesignPatternBook);
assertThrows(BookNotFoundException.class,
() -> bookService.getBookByTitle("Head First Spring"),
"Different exception thrown!");
}
@Test
public void assertThrowsWithMessageSupplier() {
BookService bookService = new BookService();
Book headFirstJavaBook = new Book("1", "Head First Java", "Wrox");
Book headFirstDesignPatternBook = new Book("2", "Head First Design Pattern", "Packt");
bookService.addBook(headFirstJavaBook);
bookService.addBook(headFirstDesignPatternBook);
assertThrows(BookNotFoundException.class,
() -> bookService.getBookByTitle("Head First Spring"),
() -> "Different exception thrown!");
}
}
Run JUnit test Class
Run the JUnit test class to execute all the JUnit test cases and here is the output:
Comments
Post a Comment
Leave Comment