当前位置: 首页 > 知识库问答 >
问题:

如何使用when()…解决Mockito丢失MethodInvocationException?

凤伟泽
2023-03-14

MissingMethodInvocationException:when()需要一个必须是“mock上的方法调用”的参数。例如:when(mock.getarticles()).ThenReturn(articles);

此外,出现此错误的原因可能是:1。您使用final/private/equals()/hashCode()方法中的任一个作为存根。这些方法不能被截取/验证。2.内部when()不是对mock而是对其他对象调用method。

我的测试:

class ValidateBookResultsTests {

public static ArrayList<Book> searchResults = new ArrayList<Book>();
public static List<Book> topFive;
public static ArrayList<String> authors = new ArrayList<String>();

public static Book book1;
public static Book book2;
public static Book book3;
public static Book book4;
public static Book book5;
public static Book book6;

@BeforeEach
public void setUp() {
    book1 = new Book("title1", authors, "publisher1");
    book2 = new Book("title2", authors, "publisher2");
    book3 = new Book("title3", authors, "publisher3");
    book4 = new Book("title4", authors, "publisher4");
    book5 = new Book("title5", authors, "publisher5");
    book6 = new Book("title6", authors, "publisher6");

    searchResults.add(book1);
    searchResults.add(book2);
    searchResults.add(book3);
    searchResults.add(book4);
    searchResults.add(book5);
    searchResults.add(book6);
}

@Test
public void returnFiveBooksFromSearchResults() {
    authors.add("John Doe");
    authors.add("Bill Gates");

    BookSearch mockBookSearch = Mockito.mock(BookSearch.class);
    Mockito.when(mockBookSearch.returnFiveBooks(searchResults)).thenReturn(topFive);

    System.out.println("return books: " + mockBookSearch.returnFiveBooks(searchResults));
    System.out.println("top: "+ topFive);

    assertEquals(topFive.size(), 5);
 }
}
public static List<Book> returnFiveBooks(ArrayList<Book> searchResults) {
  Collections.shuffle(searchResults);
  topFive = searchResults.subList(0, 5);

  printFiveResults();

  return topFive; }

共有1个答案

孟财
2023-03-14

错误消息告诉您,您的方法调用不是模拟上的方法调用。

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.
For example:
    when(mock.getArticles()).thenReturn(articles);

为什么?因为您正在尝试模拟静态方法。

Mockito.when(mockBookSearch.returnFiveBooks(searchResults)).thenReturn(topFive);

这相当于:

Mockito.when(BookSearch.returnFiveBooks(searchResults)).thenReturn(topFive);
@Test
public void returnFiveBooksFromSearchResults() {
    var topFive = BookSearch.returnFiveBooks(searchResults);
    assertEquals(topFive.size(), 5);
}
 类似资料:
  • 我读过其他的解决方案,其中提到创建一个模拟类/对象,我相信我已经用“booksearch mockBookSearch=mockito.mock(booksearch.class);” 我错过了什么?

  • 问题内容: 给出以下Mockito语句: 考虑到嘲笑方法将返回值传递给when(),Mockito如何为该嘲笑创建代理?我想这会使用一些CGLib的东西,但是有兴趣知道这在技术上是如何完成的。 问题答案: 简短的答案是,在您的示例中,的结果mock.method()将是类型合适的空值;Mockito通过代理,方法拦截和类的共享实例使用间接方式,MockingProgress以确定对模拟方法的调用是

  • 本文向大家介绍js如何解决数字精度丢失的问题?相关面试题,主要包含被问及js如何解决数字精度丢失的问题?时的应答技巧和注意事项,需要的朋友参考一下 const verifyFunc = (left, right) => { return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2); }; console.log(verifyFu

  • 主要内容:一、前情提示,二、保证投递消息不丢失的confirm机制,三、confirm机制的代码实现,四、confirm机制投递消息的高延迟性,五、高并发下如何投递消息才能不丢失,六、消息中间件全链路100%数据不丢失能做到吗?一、前情提示 我们分析了RabbitMQ开启手动ack机制保证消费端数据不丢失的时候,prefetch机制对消费者的吞吐量以及内存消耗的影响。 通过分析,我们知道了prefetch过大容易导致内存溢出,prefetch过小又会导致消费吞吐量过低,所以在实际项目中需要慎重测

  • 与手上其他项目一样,axios.create的二次封装是一样的,而 API 模块从链式调用改成了单个函数导出调用。 然后,接口调用时出了问题,期望有大佬能够帮忙看看如何解决。 以下是部分代码: 提供项目接口目录:

  • 本文向大家介绍解决uploadify使用时session发生丢失问题的方法,包括了解决uploadify使用时session发生丢失问题的方法的使用技巧和注意事项,需要的朋友参考一下 今天在使用uploadify时发现session会发生丢失的情况,经过一番研究发现,其丢失并不是真正的丢失,而是在使用Flash上传控件的时候使用的session机制和asp.net中的不相同。为解决这个问题使用两种