首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.mockito.MockingDetails.getMockHandler()Lorg/mockito/invocation/MockHandler

org.mockito.MockingDetails.getMockHandler()Lorg/mockito/invocation/MockHandler
EN

Stack Overflow用户
提问于 2021-07-04 06:51:10
回答 1查看 270关注 0票数 1

我想使用PowerMockito/Mockito为我的静态方法/void方法编写单元测试。但是,当我试图运行时,我得到了以下错误:

代码语言:javascript
复制
/Users/<username>/Library/Java/JavaVirtualMachines/corretto-
---- IntelliJ IDEA coverage runner ---- 
sampling ...
include patterns:
exclude patterns:
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider jdk.nashorn.api.scripting.NashornScriptEngineFactory not a subtype
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider jdk.nashorn.api.scripting.NashornScriptEngineFactory not a subtype
java.lang.NoSuchMethodError: org.mockito.MockingDetails.getMockHandler()Lorg/mockito/invocation/MockHandler;

    at org.powermock.api.mockito.invocation.MockHandlerAdaptor.getMockHandler(MockHandlerAdaptor.java:56)
    at org.powermock.api.mockito.invocation.MockHandlerAdaptor.createInvocation(MockHandlerAdaptor.java:81)
    at org.powermock.api.mockito.invocation.MockHandlerAdaptor.performIntercept(MockHandlerAdaptor.java:61)
    at org.powermock.api.mockito.invocation.MockitoMethodInvocationControl.invoke(MockitoMethodInvocationControl.java:93)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:186)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:168)
    at org.powermock.core.MockGateway.methodCall(MockGateway.java:138)

我刚开始使用powerMockito/Mockito,有人能帮我找出确切的问题吗?

--这是我想要测试的CreateTaskBuilder类方法:这里的JgitAccessor.clone()是一个静态的void,我对它使用了donothing()。

代码语言:javascript
复制
  public void Repository() throws DependencyFailureException, IOException, GitAPIException {
        try {
            ServiceAccessor.loadTmpSshTicket();
            if (!Files.exists(Paths.get(LambdaEnv.GIT_SSH_SCRIPT.getValue()))) { // getValue will throw exception on null
                throw new IllegalStateException(String.format("Environment variable GIT_SSH points to file %s but it doesn't exist.",
                        LambdaEnv.GIT_SSH_SCRIPT.getValue()));
            }
            JgitAccessor.clone(REPO_URI, CLONED_REPO_PATH);
        } catch (IOException | DependencyFailureException e) {
            log.info("Exception occurred while performing Service client integration. exception: [{}]", e.getMessage());
            e.printStackTrace();
        }
    }

,这是单元测试类:

代码语言:javascript
复制
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;

import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

import static org.mockito.Mockito.*;


@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"javax.management.*"})
@PrepareForTest({CreateTaskBuilder.class, LambdaEnv.class, ServiceAccessor.class, JgitAccessor.class})
public class CreateTaskBuilderTest extends TestUtils {

    @Mock
    private ServiceAccessor serviceAccessor;

    @Mock
    private JgitAccessor jgitAccessor;

    @InjectMocks
    CreateTaskBuilder builder;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }


    @Test
    public void loadServiceTicket_happyCase() throws Exception {
        doNothing().when(serviceAccessor).loadTmpSshTicket();
        PowerMockito.mockStatic(System.class);
        Mockito.when(System.getenv("GIT_SSH")).thenReturn("/tmp/ssh.sh");
        PowerMockito.mockStatic(Files.class);
        Mockito.when(Files.exists(Paths.get("/tmp/ssh.sh"))).thenReturn(true);
        PowerMockito.mockStatic(JgitAccessor.class);
        PowerMockito.doNothing().when(JgitAccessor.class, "clone", Mockito.anyString(), Mockito.anyString());
        builder.cloneRepository();
    }

我使用的是Mockito = 2.28.x;PowerMockMockito = 2.x;

EN

回答 1

Stack Overflow用户

发布于 2021-07-05 10:32:13

看起来您的类路径上有错误的库版本。

您使用的PowerMock版本需要一个带有org.mockito.MockingDetails.getMockHandler() 在Mocktio 2.8.x中找不到。的Mockito。您可以在更高版本的在2.23.x中找到它。

查看您应该使用的是mockito版本2.23.0或更高版本。的最小版本依赖项。

因此,您需要将Mockito更新为与您的PowerMock版本2.23.x或更高版本兼容的更高版本,而不是2.8.x。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68242386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档