大佬教程收集整理的这篇文章主要介绍了如何模拟所需的相关实体?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的问题中,我想测试 postservice 类。每个新添加的帖子都必须首先为其分配 Book(实体)。有关系 OnetoMany(一本书可以有很多帖子)。因此,如果您想添加新帖子,它将类似于:
post: {
"Title": "postTitle1","content": "Content of post","bookID": "1"
}
所以我的 savePost 方法是:
@Transactional
public Post savePost(Post post) {
Optional<Book> bookOpt = Optional.ofNullable(post.getBook());
Book bookInPost = bookOpt.orElseThrow(() -> new IllegalArgumentException("Book ID for new Post cannot be null!"));
Book book = bookService.getBook(bookInPost.getID());
book.addPost(post);
return postRepository.save(post);
}
现在我想测试这个方法。如何在没有注入 bookRepository/bookService 并且没有真正保存它的情况下在 Post 中模拟 Book ?书也是嵌套的(有类别、作者等),所以如果每次都从 0 开始制作会很困难。我试过这样的事情:
@Test
voID should_save_post_assigned_to_book() {
//given
Post post = new Post("Title 1","Content 1");
Book bookToReturnFromrepository = new Book();
bookToReturnFromrepository.setID(2);
//when
when(mockedBookRepository.findByID(any())).thenReturn(Optional.of(bookToReturnFromrepository));
postservice.savePost(post);
//then
Optional<Post> loaded = postRepository.findByID(post.getID());
assertAll(() -> {
assertthat(loaded).isPresent(); ...
但这显然是错误的。我该怎么办?
您必须首先确定需要测试的内容。在测试 savePost
时,有两个分支:一个是帖子没有书并且方法引发异常,另一个是信息全部存在并且帖子被保存。
考虑到这一点,第一个测试是 verify
在收到不完整的帖子时抛出异常。这里最好也验证没有保存任何内容(postRepository.save()
从未被调用)
对于第二个测试,您需要验证 book.addPost()
是否被调用,以及 postRepository.save(post)
是否在初始帖子中被调用。
对于所有这些,postRepository
的测试替身(模拟)是必不可少的。
假设您正在使用 Mockito 或类似的东西:
@Test(expected = IllegalArgumentException.class)
public void postWithoutBook() {
// Given a post that doesn't have a book
final Post post = mock(Post.class);
when(post.getBook()).thenReturn(null);
// When trying to save it,we expect an exception to be thrown.
realPostRepository.savePost(post);
verify(mockedPostRepository,never()).save(any());
}
@Test
public void postWithBook() {
// Given a post that does have a book
final Book book = mock(Book);
final Post post = mock(Post.class);
when(post.getBook()).thenReturn(book);
// When trying to save it...
realPostRepository.savePost(post);
// We expect it to be saved.
verify(mockedPostRepository,times(1)).save(post);
// And assigned to a book
verify(book,times(1)).addPost(post);
}
以上是大佬教程为你收集整理的如何模拟所需的相关实体?全部内容,希望文章能够帮你解决如何模拟所需的相关实体?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。