相关疑难解决方法(0)

模拟+ easymock-NoClassDefFoundError:net / sf / cglib / proxy / Enhancer

我正在使用easymock + powermock编写测试,因此使用powermock的原因是模拟静态方法。

我的测试课看起来像:

import static org.powermock.api.easymock.PowerMock.mockStatic;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.mockito.Mockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticTest.class)
public class DummyTest {
    @Test
    public void testDummy() {
        mockStatic(StaticTest.class);
        Mockito.when(StaticTest.testMethod()).thenReturn("hello world");
        ........
}
Run Code Online (Sandbox Code Playgroud)

这是我的测试依赖项和版本:

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-easymock</artifactId>
        <version>1.4.12</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

运行测试,我得到了初始化错误,如下所示:

java.lang.NoClassDefFoundError: net/sf/cglib/proxy/Enhancer
at org.powermock.api.extension.proxyframework.ProxyFrameworkImpl.isProxy(ProxyFrameworkImpl.java:29)
at org.powermock.reflect.internal.WhiteboxImpl.getUnmockedType(WhiteboxImpl.java:1783)
at org.powermock.reflect.internal.WhiteboxImpl.getType(WhiteboxImpl.java:2237)
at org.powermock.reflect.internal.WhiteboxImpl.setInternalState(WhiteboxImpl.java:327)
at org.powermock.reflect.proxyframework.RegisterProxyFramework.registerProxyFramework(RegisterProxyFramework.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at …
Run Code Online (Sandbox Code Playgroud)

java junit noclassdeffounderror mockito powermock

5
推荐指数
1
解决办法
1万
查看次数

无法监视 Android 类

我有一个简单的 android 常量类,如下所示:

public class Consts extends BaseConstants {

    public static final String SCHEME = "http";

    // Tag used to cancel the request
    public static final String TAG_JSON = "json_obj_req";
}
Run Code Online (Sandbox Code Playgroud)

其中没有其他内容,因此应该很容易模拟。我在我的测试用例中调用它:

Mockito.spy(Consts.class); ...这是失败的。以下是测试用例文件:

public class ApplicationTest extends ActivityInstrumentationTestCase2<MainActivity> {

  MainActivity mActivity;

  public ApplicationTest() {
      super(MainActivity.class);
  }

  @Override
  protected void setUp() throws Exception {
      super.setUp();

      setActivityInitialTouchMode(false);

      mActivity = getActivity();
  }

  public void testUrlValid() {
      Mockito.spy(Consts.class);
  }

}
Run Code Online (Sandbox Code Playgroud)

这是测试用例的 logcat 输出:

Running tests
Test running started
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class java.lang.Class …
Run Code Online (Sandbox Code Playgroud)

junit android mockito

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

junit ×2

mockito ×2

android ×1

java ×1

noclassdeffounderror ×1

powermock ×1