gpt4 book ai didi

java - 在 Android 上使用 PowerMock 验证错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:00 24 4
gpt4 key购买 nike

我正在尝试使用 PowerMock 模拟一些用于测试我们的 Android 应用程序(例如 BluetoothSocket)的类。

我已经在 PowerMock 的谷歌代码页上下载了包含所有依赖项的 zip 文件,并将它们添加到我的 Android 测试项目(包括构建路径)。

但是,当我尝试像这样使用 PowerMock 时:

@RunWith(PowerMockRunner.class )
@PrepareForTest( NetworkUtil.class )
public class TestSendAck extends TestCase{

@Test
public void testGenerateURL() {
PowerMock.mockStatic( NetworkUtil.class );

EasyMock.expect( NetworkUtil.getLocalHostname() ).andReturn( "triumph" );

PowerMock.replayAll();
PowerMock.verifyAll();
}
}

我得到以下堆栈跟踪:

java.lang.ExceptionInInitializerError
at org.easymock.internal.ClassProxyFactory.createEnhancer(ClassProxyFactory.java:249)
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:159)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:59)
at org.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2212)
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163)
at org.powermock.api.easymock.PowerMock.mockStatic(PowerMock.java:287)
at se.metrima.mafield.test.TestSendAck.testGenerateURL(TestSendAck.java:19)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
Caused by: java.lang.VerifyError: net.sf.cglib.core.ReflectUtils
at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:166)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
... 19 more

我只在将测试项目作为 Android JUnit 测试运行时出现此错误,如果我将它作为常规 JUnit 测试 powermock 运行,那么我所有需要 Android 框架的测试自然会失败。

我该如何解决这个问题?我对单元测试还很陌生,所以我还没有真正理解所有概念。

最佳答案

在 Android 下测试的类路径设置中,您的 JUnit 库版本可能不明确。您是否尝试使用 JUnit 3 或 4 运行?您的代码使用了 4 的注释,但也扩展了 3 的 TestCase 基类,您不能将两者混用。现在最好使用JUnit 4。我对Android开发不是很熟悉,所以检查Android环境正在寻找什么版本的JUnit。接下来要检查的是您是否使用了正确版本的 PowerMock,因为 JUnit 3 和 4 有不同的版本。

关于java - 在 Android 上使用 PowerMock 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com