【问题标题】:PowerMock - Cannot cast class org.powermock.api.mockito.internal.mockmaker.PowerMockMaker to interface org.mockito.plugins.MockMakerPowerMock - 无法将类 org.powermock.api.mockito.internal.mockmaker.PowerMockMaker 转换为接口 org.mockito.plugins.MockMaker
【发布时间】:2015-08-18 07:00:50
【问题描述】:

使用 TestNg + PowerMock + Mockito 时出现 java.lang.ExceptionInInitializerError:

Caused by: java.lang.NullPointerException
at org.mockito.internal.configuration.plugins.Plugins.getStackTraceCleanerProvider(Plugins.java:17)

问题的根源在于:

java.lang.ClassCastException: Cannot cast class org.powermock.api.mockito.internal.mockmaker.PowerMockMaker to interface org.mockito.plugins.MockMaker

我的依赖树:

[INFO] +- org.powermock:powermock-api-mockito:jar:1.6.2:test
[INFO] |  +- org.mockito:mockito-all:jar:1.10.19:test
[INFO] |  \- org.powermock:powermock-api-support:jar:1.6.2:test
[INFO] |     \- org.powermock:powermock-reflect:jar:1.6.2:test
[INFO] |        \- org.objenesis:objenesis:jar:2.1:test
[INFO] +- org.powermock:powermock-module-testng:jar:1.6.2:test
[INFO] |  +- org.powermock:powermock-core:jar:1.6.2:test
[INFO] |  |  \- org.javassist:javassist:jar:3.19.0-GA:test
[INFO] |  \- org.powermock:powermock-module-testng-common:jar:1.6.2:test

测试类:

@PrepareForTest({CrossSiteServletRequestFilter.class})
@PowerMockIgnore({"org.apache.log4j.*"})
@Test
public class CrossSiteServletRequestFilterTest extends PowerMockTestCase{
    @Mock
    private HttpServletRequest request;

    @BeforeSuite
    public void beforeSuite() {
        URL log4jCfg = CrossSiteServletRequestFilterTest.class.getClassLoader().getResource("log/log4j.xml");
        DOMConfigurator.configure(log4jCfg);
        MockitoAnnotations.initMocks(this); //<---It crashes here

我完全被这个错误迷失了,感谢任何帮助。

【问题讨论】:

    标签: java testng mockito powermock


    【解决方案1】:

    你不应该在 TestNG 中使用MockitoAnnotations.initMocks

    Javadoc 表示将其用于 JUnit(我认为 MockitoJUnitRunner/MockitoRule 是更好的方法),但不适用于 TestNG。

    顺便说一句,当您使用 TestNG 时,PowerMockTestCase 等效于 MockitoJUnitRunner。 因此,只需删除该行,它应该可以工作。

    【讨论】:

    • 我不确定这是问题所在。我已经将 MockitoAnnotations.initMocks() 与 TestNG 一起使用,没有任何问题。实际上,将 PowerMock 降级到 1.4.12 不会发生上述错误。
    • 而且我在没有initMocks() 的情况下使用PowerMock 也没有任何问题;)那么,当您删除该行时,1.6.2 会附加什么?
    • 我仔细检查了一下,initMocks 没有用,因为PowerMockTestCase 会在@BeforeMethod 中注入每个@Mock
    • 你是对的,使用 initMocks() 是没用的 :-) 无论如何错误是一样的。
    • 好的。但是当您删除该行时,问题出在哪里?
    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 2016-10-20
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多