Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Powermock:NoClassDefFoundError尝试模拟静态类时出错_Java_Mockito_Powermock_Powermockito - Fatal编程技术网

Java Powermock:NoClassDefFoundError尝试模拟静态类时出错

Java Powermock:NoClassDefFoundError尝试模拟静态类时出错,java,mockito,powermock,powermockito,Java,Mockito,Powermock,Powermockito,我正在努力理解如何使用Powermock。 我试图实现静态方法模拟的示例 我根据上面的例子创建了这段代码 但是,在尝试运行测试时,我得到一个NoClassDefFoundError 我不知道到底是什么导致了这个错误,因为它主要是复制粘贴的代码 // imports redacted @RunWith(PowerMockRunner.class) @PrepareForTest(Static.class) public class YourTestCase { @Test pub

我正在努力理解如何使用Powermock。 我试图实现静态方法模拟的示例

我根据上面的例子创建了这段代码

但是,在尝试运行测试时,我得到一个NoClassDefFoundError

我不知道到底是什么导致了这个错误,因为它主要是复制粘贴的代码

// imports redacted

@RunWith(PowerMockRunner.class)
@PrepareForTest(Static.class)
public class YourTestCase {
    @Test
    public void testMethodThatCallsStaticMethod() throws Exception {
        // mock all the static methods in a class called "Static"
        PowerMockito.mockStatic(Static.class);
        // use Mockito to set up your expectation
        PowerMockito.when(Static.class, "firstStaticMethod", any()).thenReturn(true);
        PowerMockito.when(Static.class, "secondStaticMethod", any()).thenReturn(321);

        // execute your test
        new ClassCallStaticMethodObj().execute();

        // Different from Mockito, always use PowerMockito.verifyStatic() first
        // to start verifying behavior
        PowerMockito.verifyStatic(Mockito.times(2));
        // IMPORTANT:  Call the static method you want to verify
        Static.firstStaticMethod(anyInt());


        // IMPORTANT: You need to call verifyStatic() per method verification,
        // so call verifyStatic() again
        PowerMockito.verifyStatic(); // default times is once
        // Again call the static method which is being verified
        Static.secondStaticMethod();

        // Again, remember to call verifyStatic()
        PowerMockito.verifyStatic(Mockito.never());
        // And again call the static method.
        Static.thirdStaticMethod();
    }
}

class Static {
    public static boolean firstStaticMethod(int foo) {
        return true;
    }

    public static int secondStaticMethod() {
        return 123;
    }

    public static void thirdStaticMethod() {
    }
}

class ClassCallStaticMethodObj {
    public void execute() {
        boolean foo = Static.firstStaticMethod(2);
        int bar = Static.secondStaticMethod();
    }
}

PowerMock 1.6.6似乎与Mockito 2.7不兼容

我对您的
pom.xml
做了一些更改。首先,我更改了powermock版本:

<powermock.version>1.7.0RC2</powermock.version>
这解决了NoClassDefFoundError


不管怎么说,我仍然必须更改它才能工作:您应该使用
Mockito.when()
,而不是
PowerMockito.when()

如上所述, 原因是版本兼容性。我正在使用mockito 3(3.3.3) 它通过声明powermockito的依赖性为我解决了问题,如下所示

      <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>2.0.7</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-mockito2</artifactId>
      <version>2.0.7</version>
      <scope>test</scope>
   </dependency>

org.powermock
powermock-module-junit4
2.0.7
测试
org.powermock
powermock-api-mockito2
2.0.7
测试

2.0.7是到目前为止最新的版本

可惜没有修复NoClassDefFoundError错误。您的类路径是如何设置的?NoClassDefFoundError的stacktrace是否向您显示缺少的类?错误消息。我认为这是WhiteboxImpl。谢谢@Hugo,但我在与一位同事交谈后决定,有更好的方法来模拟静态字段。所以我根本不使用powermock来测试它。
Mockito.when(Static.firstStaticMethod(anyInt())).thenReturn(true);
Mockito.when(Static.secondStaticMethod()).thenReturn(321);
      <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>2.0.7</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-mockito2</artifactId>
      <version>2.0.7</version>
      <scope>test</scope>
   </dependency>