Java Powermock mockstatic无法子类化final类

Java Powermock mockstatic无法子类化final类,java,eclipse,maven,junit,powermock,Java,Eclipse,Maven,Junit,Powermock,我想模仿最后一节课 PowerMockito.mockStatic(TestFinalClass.class); 当我运行一个junit并将javaagent添加到我的VM参数时,它在eclipse中工作 -javaagent:{path}/powermock-module-javaagent-1.6.4.jar 但当我尝试使用maven build命令从命令行运行所有测试用例时,我仍然得到“不能将final类子类化” 下面是我的pom.xml代码片段 <plu

我想模仿最后一节课

PowerMockito.mockStatic(TestFinalClass.class);
当我运行一个junit并将javaagent添加到我的VM参数时,它在eclipse中工作

-javaagent:{path}/powermock-module-javaagent-1.6.4.jar
但当我尝试使用maven build命令从命令行运行所有测试用例时,我仍然得到“不能将final类子类化”

下面是我的pom.xml代码片段

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <argLine>-javaagent:{path}/powermock-module-javaagent-1.6.4.jar</argLine>
            </configuration>
        </plugin>

org.apache.maven.plugins
maven surefire插件
2.4
-javaagent:{path}/powermock-module-javaagent-1.6.4.jar

这对我有用。如果添加“PowerMockRunner”和“PrepareForTest”注释,则不需要使用额外的vm参数。

我使用JaCoCo获得了代码覆盖率,需要在测试类代码中进行一些与之相关的更改。详情如下:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(FinalClass.class)
public class TestFinalClass{

    @Test
    public void whenMockFinalClassMockWorks() {

        FinalClass finalklass = PowerMockito.mock(FinalClass.class);
    }
}
  • 我删除了@runwithannotation

  • 添加了@Rule和PowerMockRule类

  • 在@PrepareForTest中提到了Final和Static类

    @PrepareForTest(FinalClass.class、StaticClass.class)

    公开课考试{

    @Rule
    public PowerMockRule rule = new PowerMockRule();
    
    @Test
    public void test() {
        PowerMockito.mockStatic(FinalClass.class);
        PowerMockito.mockStatic(StaticClass.class);
    }
    
    }

  • 在surefire中还添加了argline,以克服模拟时的最终类问题

    <configuration>
                    <argLine>-javaagent:{path}/powermock-module-javaagent-1.6.4.jar</argLine>
                </configuration>
    
    
    -javaagent:{path}/powermock-module-javaagent-1.6.4.jar
    
    <configuration>
                    <argLine>-javaagent:{path}/powermock-module-javaagent-1.6.4.jar</argLine>
                </configuration>