【问题标题】:Mockito cannot mock this class: class javax.servlet.jsp.PageContextMockito 无法模拟此类:class javax.servlet.jsp.PageContext
【发布时间】:2019-03-01 10:09:49
【问题描述】:

使用 mockito-core-2.24.jar 和 junit 会出现以下异常
这是纯 Java 代码,我收到了:

org.mockito.exceptions.base.MockitoException: Mockito 不能模拟这个 类:类 javax.servlet.jsp.PageContext。

Mockito 只能模拟非私有和非最终类。

    Java               : 1.8
    JVM vendor name    : Oracle Corporation
    JVM vendor version : 25.202-b08
    JVM name           : Java HotSpot(TM) 64-Bit Server VM
    JVM version        : 1.8.0_202-b08
    JVM info           : mixed mode
    OS name            : Windows 10
    OS version         : 10.0

异常堆栈跟踪:

Underlying exception : java.lang.IllegalArgumentException: Could not create type
            at com.ups.webappcommon.cclamp.cclamptag.Wems_GetContentTagTest.setUp(Wems_GetContentTagTest.java:22)
            at junit.framework.TestCase.runBare(TestCase.java:125)
            at junit.framework.TestResult$1.protect(TestResult.java:106)
            at junit.framework.TestResult.runProtected(TestResult.java:124)
            at junit.framework.TestResult.run(TestResult.java:109)
            at junit.framework.TestCase.run(TestCase.java:118)
            at junit.framework.TestSuite.runTest(TestSuite.java:208)
            at junit.framework.TestSuite.run(TestSuite.java:203)
            at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35)
            at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)
            at org.mockito.Mockito.mock(Mockito.java:1896)
            at org.mockito.Mockito.mock(Mockito.java:1805)
            ... 14 more
        Caused by: java.lang.NoClassDefFoundError: javax/el/ELContext
            at java.lang.Class.getDeclaredMethods0(Native Method)
            at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
            at java.lang.Class.getDeclaredMethods(Unknown Source)
            at net.bytebuddy.description.method.MethodList$ForLoadedMethods.
        Caused by: java.lang.ClassNotFoundException: javax.el.ELContext
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            ... 49 more

我的代码:

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.jsp.PageContext;
    import org.mockito.Mockito;
    import junit.framework.TestCase;

    public class xxxxxx extends TestCase {

        public xxxxxxxxxxxxxxxxx xx = new xxxxxxxxxxxxxxx();
        private final PageContext pageContext = Mockito.mock(PageContext.class);
        public HttpServletRequest request;

        protected void setUp() throws Exception {
            super.setUp();
            xxxxxxxxx.setPageContext(pageContext);
            request = Mockito.mock(HttpServletRequest.class);
            xxxxxxxx.setPageContext(pageContext);
            Mockito.when(pageContext.getRequest()).thenReturn(request);
        }

【问题讨论】:

  • 欢迎来到 Stackoverflow。请使用格式选项使帖子可读。
  • 尝试在你的类路径中添加 el-api.jar

标签: junit mockito


【解决方案1】:

这里:

原因:java.lang.NoClassDefFoundError: javax/el/ELContext

这是真正的问题。这归结为:项目设置不足。

您必须确保满足所有您的依赖关系,即使是“传递”的东西。

换句话说:确保您的类路径中有 el-api.jar。

注意:错误信息...

Mockito 只能模拟非私有和非最终类。

这里是“无效的”,因为该类既不是私有的也不是文件。但问题是 Mockito 一直在打印该消息,因为人们经常尝试这样做:模拟私有/最终类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多