Mockito + PowerMock + TestNG + Libgdx [英] Mockito + PowerMock + TestNG + Libgdx

查看:151
本文介绍了Mockito + PowerMock + TestNG + Libgdx的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将powermock库添加到正在运行的项目中,但出现错误.

I'm trying add the powermock library to the working project, but I'm getting errors.

我如何添加它:

1)AbsTest extends PowerMockTestCase

2)Build.gradle依赖项

2) Build.gradle dependencies

3)在某些测试中,添加@PrepareForTest({SomeClass.class}).完成此步骤后,就会发生此错误.

3) In some test add @PrepareForTest({SomeClass.class}). After this step this error occured.

在build.gradle中包含所有库. 在初始化HeadlessApplication以便使用Gdx.*静态变量的地方发生了错误.

In build.gradle all libraries are included. Error occured in a place where initialize HeadlessApplication for use Gdx.* static vars.

项目中的所有测试都扩展了此类:

All tests in project extend this class:

abstract public class AbsTest extends PowerMockTestCase {

    static {
        initGdx();
    }

    protected static void initGdx() {
        // Initialize libgdx headless for use static vars (e.g. Gdx.input.setInputProcessor)
        final HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration();
        config.renderInterval = 1f / 60; // Likely want 1f/60 for 60 fps

        new HeadlessApplication(mock(Core.class), config); <=== ERROR LINE
    }

    @BeforeMethod(alwaysRun = true)
    public void initMethod() throws Exception {
        // Initialize mocks
        MockitoAnnotations.initMocks(this);
    }
}

错误:

org.testng.TestNGException:实例化时发生错误 ru.coolone.adventure_emulation.input.InputGroupsTest类:在null org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:435) 在 org.testng.internal.ClassHelper.createInstance(ClassHelper.java:336) 在 org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:125) 在org.testng.internal.ClassImpl.getInstances(ClassImpl.java:190)在 org.testng.TestClass.getInstances(TestClass.java:95)在 org.testng.TestClass.initTestClassesAndInstances(TestClass.java:81) 在org.testng.TestClass.init(TestClass.java:73)处 org.testng.TestClass.(TestClass.java:38)在 org.testng.TestRunner.initMethods(TestRunner.java:389)在 org.testng.TestRunner.init(TestRunner.java:271)在 org.testng.TestRunner.init(TestRunner.java:241)在 org.testng.TestRunner.(TestRunner.java:167)在 org.testng.SuiteRunner $ DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:663) 在org.testng.SuiteRunner.init(SuiteRunner.java:260)处 org.testng.SuiteRunner.(SuiteRunner.java:198)在 org.testng.TestNG.createSuiteRunner(TestNG.java:1271)在 org.testng.TestNG.createSuiteRunners(TestNG.java:1249)在 org.testng.TestNG.runSuitesLocally(TestNG.java:1107)在 org.testng.TestNG.runSuites(TestNG.java:1028)在 org.testng.TestNG.run(TestNG.java:996)在 org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)在 org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127) 由以下原因引起:java.lang.ExceptionInInitializerError sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.powermock.modules.testng.internal.TestClassInstanceFactory.create(TestClassInstanceFactory.java:51) 在 org.powermock.modules.testng.internal.PowerMockClassloaderObjectFactory.newInstance(PowerMockClassloaderObjectFactory.java:46) 在 org.powermock.modules.testng.PowerMockObjectFactory.newInstance(PowerMockObjectFactory.java:43) 在 org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:423) ... 21更多原因:java.lang.IllegalStateException:无法 初始化插件:接口org.mockito.plugins.MockMaker位于 org.mockito.internal.configuration.plugins.PluginLoader $ 1.invoke(PluginLoader.java:66) 在com.sun.proxy.$ Proxy19.isTypeMockable(未知来源)处 org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29) 在 org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22) 在 org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:186) 在 org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:180) 在org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)处 org.mockito.Mockito.mock(Mockito.java:1729)在 org.mockito.Mockito.mock(Mockito.java:1642)在 ru.coolone.adventure_emulation.AbsTest.initGdx(AbsTest.java:37)在 ru.coolone.adventure_emulation.AbsTest.(AbsTest.java:30)... 29个以上的原因:java.lang.IllegalStateException:无法加载 在以下位置声明的接口org.mockito.plugins.MockMaker实现 sun.misc.CompoundEnumeration@7dc3712在 org.mockito.internal.configuration.plugins.PluginLoader.loadImpl(PluginLoader.java:101) 在 org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:45) 在 org.mockito.internal.configuration.plugins.PluginRegistry.(PluginRegistry.java:18) 在 org.mockito.internal.configuration.plugins.Plugins.(Plugins.java:17) 在org.mockito.internal.util.MockUtil.(MockUtil.java:24)... 其他37个原因:java.lang.ClassCastException:无法转换 org.powermock.api.mockito.mockmaker.PowerMockMaker来 org.mockito.plugins.MockMaker位于 java.lang.Class.cast(Class.java:3369)在 org.mockito.internal.configuration.plugins.PluginLoader.loadImpl(PluginLoader.java:97) ...还有41个

org.testng.TestNGException: An error occurred while instantiating class ru.coolone.adventure_emulation.input.InputGroupsTest: null at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:435) at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:336) at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:125) at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:190) at org.testng.TestClass.getInstances(TestClass.java:95) at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:81) at org.testng.TestClass.init(TestClass.java:73) at org.testng.TestClass.(TestClass.java:38) at org.testng.TestRunner.initMethods(TestRunner.java:389) at org.testng.TestRunner.init(TestRunner.java:271) at org.testng.TestRunner.init(TestRunner.java:241) at org.testng.TestRunner.(TestRunner.java:167) at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:663) at org.testng.SuiteRunner.init(SuiteRunner.java:260) at org.testng.SuiteRunner.(SuiteRunner.java:198) at org.testng.TestNG.createSuiteRunner(TestNG.java:1271) at org.testng.TestNG.createSuiteRunners(TestNG.java:1249) at org.testng.TestNG.runSuitesLocally(TestNG.java:1107) at org.testng.TestNG.runSuites(TestNG.java:1028) at org.testng.TestNG.run(TestNG.java:996) at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127) Caused by: java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.powermock.modules.testng.internal.TestClassInstanceFactory.create(TestClassInstanceFactory.java:51) at org.powermock.modules.testng.internal.PowerMockClassloaderObjectFactory.newInstance(PowerMockClassloaderObjectFactory.java:46) at org.powermock.modules.testng.PowerMockObjectFactory.newInstance(PowerMockObjectFactory.java:43) at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:423) ... 21 more Caused by: java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:66) at com.sun.proxy.$Proxy19.isTypeMockable(Unknown Source) at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29) at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22) at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:186) at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:180) at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62) at org.mockito.Mockito.mock(Mockito.java:1729) at org.mockito.Mockito.mock(Mockito.java:1642) at ru.coolone.adventure_emulation.AbsTest.initGdx(AbsTest.java:37) at ru.coolone.adventure_emulation.AbsTest.(AbsTest.java:30) ... 29 more Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in sun.misc.CompoundEnumeration@7dc3712 at org.mockito.internal.configuration.plugins.PluginLoader.loadImpl(PluginLoader.java:101) at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:45) at org.mockito.internal.configuration.plugins.PluginRegistry.(PluginRegistry.java:18) at org.mockito.internal.configuration.plugins.Plugins.(Plugins.java:17) at org.mockito.internal.util.MockUtil.(MockUtil.java:24) ... 37 more Caused by: java.lang.ClassCastException: Cannot cast org.powermock.api.mockito.mockmaker.PowerMockMaker to org.mockito.plugins.MockMaker at java.lang.Class.cast(Class.java:3369) at org.mockito.internal.configuration.plugins.PluginLoader.loadImpl(PluginLoader.java:97) ... 41 more

build.gradle:

build.gradle:

...
testCompile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
testCompile "com.badlogicgames.gdx:gdx-backend-headless:$gdxVersion"
testCompile 'org.testng:testng:6.13.1'
testCompile "org.mockito:mockito-core:2.8.9"
testCompile "org.powermock:powermock-api-mockito2:1.7.3"
testCompile "org.powermock:powermock-module-testng:1.7.3"
...

推荐答案

我已解决此问题.我只是将initGdx();移至重载的beforePowerMockTestMethod()beforePowerMockTestClass()并删除了Mockito注释初始化,因为它在父类中执行.

I'm fixed this. Im just move initGdx(); to overloaded beforePowerMockTestMethod() or beforePowerMockTestClass() and delete mockito annotations initialization because it execute in the parent class.

固定的AbsTest类:

fixed AbsTest class:

abstract public class AbsTest extends PowerMockTestCase {

    protected static void initGdx() {
        // Initialize libgdx headless for use static vars (e.g. Gdx.input.setInputProcessor)
        final HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration();
        config.renderInterval = 1f / 60; // Likely want 1f/60 for 60 fps
        new HeadlessApplication(mock(Core.class), config);
    }

    @BeforeMethod
    @Override
    protected void beforePowerMockTestMethod() throws Exception {
        initGdx();
        super.beforePowerMockTestMethod();
    }
}

或带有重载beforePowerMockTestClass方法

abstract public class AbsTest extends PowerMockTestCase {

    protected static void initGdx() {
        // Initialize libgdx headless for use static vars (e.g. Gdx.input.setInputProcessor)
        final HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration();
        config.renderInterval = 1f / 60; // Likely want 1f/60 for 60 fps
        new HeadlessApplication(mock(Core.class), config);
    }

    @BeforeClass
    @Override
    protected void beforePowerMockTestClass() throws Exception {
        super.beforePowerMockTestClass();
        initGdx();
    }
}

这篇关于Mockito + PowerMock + TestNG + Libgdx的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆