Как смоделировать метод поиска репозитория JPA в модульных тестах - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь проверить свой маленький проект, и у меня проблема.Мое приложение использует простую многоуровневую архитектуру, и я не могу встретиться с сервисным уровнем UT.На самом деле я пытаюсь издеваться над классом CrudRepository из Spring-data.Я пытаюсь смоделировать метод findAll одного из моих репозиториев, который расширяет этот класс, но mockito не может смоделировать интерфейс.Есть ли способ сделать это просто помимо создания бина и заполнения его?

[Обновить] Вот код репозитория:

package fr.kaf.interview.Repository;

import fr.kaf.interview.model.Book;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BookRepository extends CrudRepository<Book,Long> {
}

Вот UT:

@ExtendWith(MockitoExtension.class)
class BookServiceTest {


@Mock
private BookRepository bookRepository;

@InjectMocks
private BookService bookService;

@Test
public void should_get_All_books_from_database() {
    //Given

    Person author = new Person();
    author.setFirstName("Ka");
    author.setLastName("AwQl");

    Book firstBook = new Book();
    firstBook.setTitle("One Book");
    firstBook.setAuthors(singletonList(author));

    Book secondBook = new Book();
    secondBook.setTitle("Second Book");
    secondBook.setAuthors(singletonList(author));

    given(bookRepository.findAll()).willReturn(asList(firstBook, secondBook));

    //When
    List<Book> allBooks = bookService.getAllBooks();

    //Then
    assertThat(allBooks).containsExactly(firstBook, secondBook);

}

}

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Если я хорошо помню, ваш тест должен использовать это:

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }
0 голосов
/ 13 февраля 2019

Мне интересно, если проблема в том, что Mockito не уверен, как вставить bookService в Spring TestContext.

Я бы попытался аннотировать тест с помощью @ExtendWith(SpringExtension.class), как предложено внизу.раздела " Ввод зависимостей при написании тестов " Руководства пользователя JUnit5.

Исходный код этой аннотации здесь .

Я такжедумаю, что возможно, стиль given в стиле *1013* BDD и стиль when\\then могут иметь разные результаты.

...