如何在单元测试中模拟 JPA 存储库的查找方法



我正在尝试UT我的小项目,但我遇到了问题。我的应用程序使用简单的分层架构,我不能碰巧UT服务层。事实上,我试图从 Spring-data 中模拟类 CrudRepository。我正在尝试模拟方法查找扩展此类的存储库之一,但 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);
}
}

我想知道问题是否在于 Mockito 不确定如何将bookService注入 Spring TestContext。

我会尝试按照 JUnit5 用户指南"编写测试依赖项注入"部分底部的建议@ExtendWith(SpringExtension.class)

注释测试。

该注释的源代码在此处。

我还认为 Mockito 的 BDD given风格和when\then风格可能会产生不同的结果。

如果我

记得不错,你的测试必须使用这个:

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

相关内容

  • 没有找到相关文章

最新更新