gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:07:34 26 4
gpt4 key购买 nike

我正在尝试 UT 我的小项目,但遇到了问题。我的应用程序使用简单的分层架构,我无法碰巧使用 UT 服务层。事实上,我正在尝试模拟类(class) CrudRepository 来自 Spring 数据。我正在尝试模拟扩展此类的我的存储库之一的 findAll 方法,但 mockito 无法模拟接口(interface)。除了自己创建 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 注入(inject) Spring TestContext。

我会按照 JUnit5 用户指南“Writing Tests Dependency Injection”部分底部的建议,尝试使用 @ExtendWith(SpringExtension.class) 注释测试。

该注释的源代码是 here .

我也认为 given BDD style of Mockito 是可能的而 when\\then 样式可能会产生不同的结果。

关于java - 如何在单元测试中模拟 JPA 存储库的查找方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com