PowerMock ECLEmma coverage issue

前端 未结 8 1784
无人共我
无人共我 2020-11-30 09:39


We are using EasyMock and PowerMock with JUnit. The coverage tool used is ECLEmma. With EasyMock, it shows the coverage properly in green (as covered). However, for

相关标签:
8条回答
  • 2020-11-30 10:10

    This has worked in most cases in my project:

    @Rule
    public PowerMockRule rule = new PowerMockRule();
    static {
        PowerMockAgent.initializeIfNeeded();
    }
    

    Remove/Comment @RunWith(PowerMockRunner.class) & include following imports after adding powermock-module-javaagent-1.6.5.jar in your classpath:

    import org.junit.Rule;
    import org.powermock.modules.junit4.rule.PowerMockRule;
    import org.powermock.modules.agent.PowerMockAgent;
    

    Now right click->Coverage As->Coverage Configurations and add following lines in Arguments:

    -ea -noverify -javaagent:path/to/powermock-module-javaagent-1.6.5.jar
    

    Click Apply->Coverage.

    Also note that @Before would not work in this case so you have to add all the stuffs in the methods marked with @Test from the method marked with @Before.

    0 讨论(0)
  • 2020-11-30 10:11

    For mocking static classes, using @RunWith(PowerMockRunner.class) and running the "Coverage As JUnit Test" on Eclipse does show covered code as uncovered and it clearly does seem like an issue.

    To add to the solutions above, in a maven project, you can try this..

    In the root pom.xml, for report generation, add html as a format in cobertura-maven-plugin. Below is the way it looks.

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <configuration>
           <formats>
              <format>html</format>
              <format>xml</format>
           </formats>
        </configuration>
    </plugin>
    

    Then, go to the module where your class resides and open target/site/cobertura/index.html file in Eclipse Web Browser or in the one of your choice. You can find the coverage information there.

    0 讨论(0)
  • 2020-11-30 10:13

    I have managed to generate PowerMock coverage with Jacoco, using powermock-module-javaagent.

    Just make sure you put powermock agent after jacoco agent:

    <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <useSystemClassLoader>true</useSystemClassLoader>
                    <argLine>${jacocoArgLine} -javaagent:${settings.localRepository}/org/powermock/powermock-module-javaagent/${powermock.version}/powermock-module-javaagent-${powermock.version}.jar -noverify</argLine>
    ...
    

    If you want to see an example, take a look at this project: https://github.com/jfcorugedo/sonar-scanner

    Here you can see that sonar takes into account static methods and new statements mocked by PowerMock:

    If you want to mock newstatements make sure you use PowerMockRule instead of PowerMockRunner.

    Take a look at this test

    0 讨论(0)
  • 2020-11-30 10:19

    It's a known problem : https://github.com/jayway/powermock/issues/422

    And it has been for a long time, it won't be fixed anytime soon.

    I suggest you use eCobertura instead.

    0 讨论(0)
  • 2020-11-30 10:19

    Updating powermock version fix my issue below is maven dependency of supported version

    <dependency>
       <groupId>org.powermock</groupId>
       <artifactId>powermock-module-junit4-rule-agent</artifactId>
       <version>1.7.3</version>
       <scope>test</scope>
    </dependency>
    

    Hope this helps !!!

    0 讨论(0)
  • 2020-11-30 10:24

    I was facing the same issue. So, I updated the powerMockito version. Now I am using Power mock version 1.7.4 and Jacoco version 0.8.5. It's even working on eclipse also.

    0 讨论(0)
提交回复
热议问题