gpt4 book ai didi

java - Mockito 错误 MissingMethodInvocationException

转载 作者:行者123 更新时间:2023-11-30 08:06:19 29 4
gpt4 key购买 nike

我正在为我的程序编写测试,但我在这部分遇到异常。

@Test
public void test(){
HttpSession session = new MockHttpSession();
//other code
...
// #1 MissingMethodInvocationException
when(session.getAttribute(SessionConstants.SESSION)).thenReturn(image);
runClassMyApp.method(session);

// #2 I can't get attribute from session I get `null`.
List<MyClass> = (ArrayList) session.getAttribute(SessionConstants.SESSION);
}

如果我替换:

`HttpSession session = new MockHttpSession();`

到:

@Mock
private HttpSession session;

需要测试的方法

public void method(HttpSession session){
String value = session.getAttribute(SessionConstants.SESSION)
List<String> result = new ArrayList();
result.add(value);
session.setAttribute(SessionConstants.SESSION, result);
}

如果我使用注释 @Mock 我会得到 #2 错误,如果我使用 MockHttpSession() 我会得到 #1 错误

它的#1 异常:

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);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.

最佳答案

虽然您没有发布 MockHttpSession 的代码,但它似乎是一个非 Mockito 类,它解释了错误。如其所述,when() 只能在 Mockito 创建的模拟上调用。

然后您尝试按如下方式创建模拟是正确的:

@Mock
private HttpSession session;

但是您遗漏了实际进行创建的调用:

MockitoAnnotations.initMocks(this);

将以上行添加到您的测试中,最好是在设置方法中,when() 调用应该可以工作。

关于java - Mockito 错误 MissingMethodInvocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424302/

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