簡體   English   中英

如何在單元測試中模擬JPA存儲庫的find方法

[英]How to mock JPA repository's find method in unit tests

我正在嘗試使用我的小項目,但遇到了問題。 我的應用程序使用簡單的分層體系結構,而我不能碰巧使用服務層。 實際上,我正在嘗試從Spring-data模擬類CrudRepository 我正在嘗試對擴展此類的存儲庫之一的方法findAll進行模擬,但模擬不能模擬接口。 除了自己創建並填充Bean之外,還有其他方法嗎?

[更新]這是存儲庫代碼:

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);

}

}

我想知道問題是否在於Mockito不確定如何將bookService注入Spring TestContext。

我會嘗試按照《 JUnit5用戶指南》“ 編寫測試依賴項注入 ”部分底部的建議,使用@ExtendWith(SpringExtension.class)注釋測試。

該注釋的源代碼在此處

我還認為given 的Mockito BDD樣式when\\\\then樣式可能會有不同的結果。

如果我記得很好,您的測試必須使用此方法:

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM