Powermock 不断为 ScriptEngineManager 抛出错误

Posted

技术标签:

【中文标题】Powermock 不断为 ScriptEngineManager 抛出错误【英文标题】:Powermock keeps throwing errors for ScriptEngineManager 【发布时间】:2017-11-11 10:18:36 【问题描述】:

由于我想在我的测试中使用来自 JUnit 的类别,我不得不用 PowerMock 重写一些模拟测试(在 EasyMock 之上的 powermock 以模拟静态)。从 RunWith(PowermockRunner.class) 到下面;

    @Category(ServerTests.class)
@PrepareForTest(EnvironmentConfig.class)
@PowerMockIgnore( "javax.management.*", "org.w3c.dom.*", "org.apache.log4j.*", "org.xml.sax.*",   "javax.xml.*")
public class JmsHelperTest 

    @Rule
    public PowerMockRule rule = new PowerMockRule();


很遗憾,我已经使用 PowerMockIgnore 抑制了一些错误,但最后一个我无法抑制,希望您能提供帮助。

错误:

ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory:提供者 jdk.nashorn.api.scripting.NashornScriptEngineFactory 不是子类型 ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory:提供者 jdk.nashorn.api.scripting.NashornScriptEngineFactory 不是子类型 2017-06-09 13:37:24,660 主要错误找不到语言的脚本引擎 javascript。可用语言为:2017-06-09 13:37:24,776 main WARN 找不到名为 的脚本

用于参考加载的包;

import mypackage.EnvironmentConfig;
import mypackage.category.ServerTests;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.rule.PowerMockRule;

import static org.easymock.EasyMock.expect;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
import static org.powermock.api.easymock.PowerMock.mockStatic;
import static org.powermock.api.easymock.PowerMock.replay;

【问题讨论】:

【参考方案1】:

我专注于jdk.nashorn.*,但是当我将javax.script.* 添加到@PowerMockIgnore 时,它解决了错误。

【讨论】:

以上是关于Powermock 不断为 ScriptEngineManager 抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

Android 单元测试实战—— 基于Powermock的常用方法指南

PowerMock

PowerMock ECLemma 覆盖问题

Powermock 不嘲笑 Consul 课程

解决Jacoco和PowerMock不兼容的问题

Mockito和PowerMock用法