2013-11-03 4 views
1

Я хотел бы проверить метод makeBooks(), который возвращает объект книги с Mockito. Итак, тест проверяет, возвращает ли он объект книги или нет. Как мне это сделать?Тестирование метода, который возвращает объект с Mockito

Ниже представлена ​​моя фабрика, которая производит книги. Ниже этого класса мой класс тестирования Mockito. У меня есть код ошибки: «Я неправильно использовал Mockito»

Я изучаю Mockito, кстати. Это не Домашнее задание или задание.

public class ItemFactory { 
    public Items getItems(String itemType) 
    {  
     public static Books makeBooks(String bookName,String authorName, int ISBN, int id) 
     { 
      Books book = new Books(bookName, authorName, ISBN, id); 
      return book; 
     } 
    } 
} 

public class TestItemFactory { 
    private static final Books books = null; 
    private static ItemFactory mockItemFactory; 

    @BeforeClass 
    public static void setUpBeforeClass() throws Exception { 
     mockItemFactory = Mockito.mock(ItemFactory.class); 
    } 

    @Test 
    public void testShouldReturnObjectBooks(){ 
     //ItemFactory methodMakeBooks = Mockito.mock(ItemFactory.class) ; 
     //Books book = null;// = ItemFactory.makeBooks("Hamlet", "ShakeSpear", 123456, 9); 
     //final Class<?> bookClass = Books.class; 
     //Mockito.when(methodMakeBooks.makeBooks(null, null, 0, 0)).thenReturn(book); 
     Books book = null; 

     mockItemFactory = Mockito.spy(new ItemFactory()); 
     Books mockBook = Mockito.mock(Books.class); 
     Mockito.when(mockItemFactory.makeBooks(null, null, 0, 0)).thenReturn(book); 
     //Mockito.doReturn(mockBook).when(mockItemFactory).makeBooks(null, null, 0, 0); 
    } 
} 
+0

Не похоже, что 'ItemFactory' будет скомпилирован. – Jonathan

ответ

0

Сделать служебный метод, который работает makeBooks(), чтобы проверить, является ли нулевое значение из Books объектов и посмотреть, если это на самом деле типа Books:

public boolean test(String bookName, String authorName, int ISBN, int id) 
{ 
    // Check to see if the object being returned is not null 
    if (ItemFactory.makeBooks(bookName, authorName, ISBN, id) != null) 
    { 
     // Check to see if object being returned is of type Books 
     if (ItemFactory.makeBooks(bookName, authorName, ISBN, id) instanceof Books) 
     { 
      return true; 
     } 

     return false; 
    } 

    return false; 
} 
+0

Действительно умный ход для работы. Но зачем создавать другой метод, который возвращает true или false, когда есть способ протестировать оригинальный метод с помощью Mockito. Я надеюсь, что есть хорошие учебники по использованию Mockito. –

+0

Я могу проверить его с помощью JUnit с использованием активов и т. Д. ... но я учусь использовать Mockito –

+0

Да, я не слишком знаком с Mockito, поэтому я пытаюсь предоставить вам альтернативную работу, если вы не способен найти что угодно. Надеюсь это поможет! – Omicron

3

Вы не должны быть насмешливый класс, который находится под контролем. Вы должны издеваться над классами, которые используете ваш класс/методы тестирования. Не имеет смысла издеваться над Itemfactory.makeBooks()

Если была сделана Bookfactory, которую ItemsFactory использовала, чтобы делать книги, вы могли бы высмеять BookFactory, чтобы вернуть определенную книгу/набор книг, которые вы ожидали. и тогда вы могли бы утверждать, что

+0

Что-то вроде этого? –

+0

ItemFactory factory = Mockito.mock (ItemFactory.class); \t \t Книги b = factory.makeBooks («Гамлет», «ShakeSpear», 123456, 9); \t \t assertTrue (b.getClass(). GetName(). Equals ("LibraryItems.Books")); –

0

Как уже объяснялось, вы не должны издеваться над классом, который вы тестируете. Если Book является POJO, тогда нет необходимости ничего издеваться над чем-то, вам просто нужно утверждать, что созданный объект Book был заполнен правильно. Зачем усложнять жизнь, когда есть более простая альтернатива, макет объектов только тогда, когда это абсолютно необходимо.

Я понимаю, что вы изучаете Мокито, и я думаю, что понимание того, когда и что издеваться, также является шагом в правильном направлении.

Возможно, вы получаете ошибку, потому что Mockito не поддерживает насмешку статических методов. Расширение Powermock добавляет поддержку статических методов, конструкторов, частных методов и т. Д.

Как для примера, наилучшим местом для начала является раздел examples and documentation, размещенный на сайте проекта.

0

Я предлагаю использовать PowerMockito (для статического метода издевательства) с Mockito с Junit (для Asserts). Я собирался написать класс tast для тестируемого класса (например, CUT, ItemFactory), но ваш класс ItemFactory не подлежит компиляции.

Вы исправите свой класс ItemFactory, и я покажу вам, как его протестировать с помощью PowerMockito с Mockito.

Смежные вопросы