Use Mockito in Junit

Mockito

Book類

package testMockito;

import java.util.List;

public class Book {

    private String isbn;
    private String title;
    private List<String> authors;
    private String publication;
    private Integer yearOfPublication;
    private Integer numberOfPages;
    private String image;

    public Book(String isbn, String title, List<String> authors,
            String publication, Integer yearOfPublication,
            Integer numberOfPages, String image) {

        this.isbn = isbn;
        this.title = title;
        this.authors = authors;
        this.publication = publication;
        this.yearOfPublication = yearOfPublication;
        this.numberOfPages = numberOfPages;
        this.image = image;

    }

    public String getIsbn() {
        return isbn;
    }

    public String getTitle() {
        return title;
    }

    public List<String> getAuthors() {
        return authors;
    }

    public String getPublication() {
        return publication;
    }

    public Integer getYearOfPublication() {
        return yearOfPublication;
    }

    public Integer getNumberOfPages() {
        return numberOfPages;
    }

    public String getImage() {
        return image;
    }
}

使用Book的BookDAL類

package testMockito;

import java.util.Collections;
import java.util.List;

public class BookDAL {
    private static BookDAL bookDAL = new BookDAL();

    public List<Book> getAllBooks(){
        return Collections.EMPTY_LIST;
    }

    public Book getBook(String isbn){
        return null;
    }

    public String addBook(Book book){
        return book.getIsbn();
    }

    public String updateBook(Book book){
        return book.getIsbn();
    }

    public static BookDAL getInstance(){
        return bookDAL;
    }

}

對BookDAL進行Junit測試

package testMockito;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.List;

import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class BookDALTest {

    private static BookDAL mockedBookDAL;
    private static Book book1;
    private static Book book2;

    @BeforeClass
    public static void setUp() {
        // create mock object of BookDAL
        mockedBookDAL = mock(BookDAL.class);

        // create some instances of Book class.
        book1 = new Book("8131721019", "Compilers Principles", Arrays.asList(
                "D. Jeffrey Ulman", "Ravi Sethi", "Alfred V. Aho",
                "Monica S. Lam"), "Pearson Education Singapore Pte Ltd", 2008,
                1009, "BOOK_IMAGE");

        book2 = new Book("9788183331630", "Let Us C 13th Edition",
                Arrays.asList("Yashavant Kanetkar"), "BPB PUBLICATIONS", 2012,
                675, "BOOK_IMAGE");

        // Stubbing the methods of mocked BookDAL with mocked data.
        when(mockedBookDAL.getAllBooks()).thenReturn(
                Arrays.asList(book1, book2));
        when(mockedBookDAL.getBook("8131721019")).thenReturn(book1);
        when(mockedBookDAL.addBook(book1)).thenReturn(book1.getIsbn());
        when(mockedBookDAL.updateBook(book1)).thenReturn(book1.getIsbn());
        when(mockedBookDAL.updateBook(book2)).thenReturn(book2.getIsbn());
    }

    @Test
    public void testGetAllBooks() {
        List<Book> allBooks = mockedBookDAL.getAllBooks();
        assertEquals(2, allBooks.size());
        Book myBook = allBooks.get(0); // book1
        assertEquals("8131721019", myBook.getIsbn());
        assertEquals("Compilers Principles", myBook.getTitle());
        assertEquals(4, myBook.getAuthors().size());
        assertEquals((Integer) 2008, myBook.getYearOfPublication());
        assertEquals((Integer) 1009, myBook.getNumberOfPages());
        assertEquals("Pearson Education Singapore Pte Ltd",
                myBook.getPublication());
        assertEquals("BOOK_IMAGE", myBook.getImage());
    }

    @Test
    public void testGetBook() {
        String isbn = "8131721019";

        Book myBook = mockedBookDAL.getBook(isbn);

        assertNotNull(myBook);
        assertEquals(isbn, myBook.getIsbn());
        assertEquals("Compilers Principles", myBook.getTitle());
        assertEquals(4, myBook.getAuthors().size());
        assertEquals("Pearson Education Singapore Pte Ltd",
                myBook.getPublication());
        assertEquals((Integer) 2008, myBook.getYearOfPublication());
        assertEquals((Integer) 1009, myBook.getNumberOfPages());
    }

    @Test
    public void testAddBook() {
        String isbn = mockedBookDAL.addBook(book1);
        assertNotNull(isbn);
        assertEquals(book1.getIsbn(), isbn);

    }

    @Test
    public void testUpdateBook() {
        String isbn = mockedBookDAL.updateBook(book1);
        assertNotNull(isbn);
        assertEquals(book1.getIsbn(), isbn);
        isbn = mockedBookDAL.updateBook(book2);
        assertNotNull(isbn);
        assertEquals(book2.getIsbn(), isbn);

    }

    @Ignore@Test
    public void testGetInstance() {
        fail("Not yet implemented");
    }

}

通過使用mock框架,在不用實際配置數據源的情況下,就可以測試BookDAL類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章