Mockito + PowerMock + TestNG + Libgdx

编程入门 行业动态 更新时间:2024-10-21 09:17:16
本文介绍了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

本文发布于:2023-10-31 04:22:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1544987.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:PowerMock   Mockito   Libgdx   TestNG

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!