繁体   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