Home > Back-end >  PowerMockito mock static didn't work correctly
PowerMockito mock static didn't work correctly

Time:06-22

I have a class need to be tested:

public class TestClazz {

    public void abc() {
        List<String> sa = Collections.singletonList("sa");
        Stream<PropertySource<?>> stream = StreamSupport.stream(Mockito.mock(Spliterator.class), false);
        ICampaignHandler campaignHandler = CampaignHandlerFactory.getCampaignHandler(ProcessorTypeEnum.RETRY_CAMPAIGN);

        System.out.println("============INSIDE ABC===========");
        System.out.println(sa);
        System.out.println(stream);
        System.out.println(campaignHandler);

        //Other logic code
    }

}

And a test class:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Collections.class, StreamSupport.class, CampaignHandlerFactory.class})
public class DefaultSystemAppConfigServiceTest {

    @Test
    public void testing() {
        PowerMockito.mockStatic(StreamSupport.class);
        PowerMockito.mockStatic(Collections.class);
        PowerMockito.mockStatic(CampaignHandlerFactory.class);

        //Stubbing
        Mockito.when(StreamSupport.stream(Mockito.any(Spliterator.class), Mockito.anyBoolean()))
                .thenReturn(Mockito.mock(Stream.class));
        Mockito.when(Collections.singletonList(Mockito.any()))
                .thenReturn(Mockito.mock(List.class));
        Mockito.when(CampaignHandlerFactory.getCampaignHandler(Mockito.any()))
                .thenReturn(Mockito.mock(ICampaignHandler.class));

        //Here invoked method under test
        new TestClazz().abc();

        Stream<PropertySource<?>> stream = StreamSupport.stream(Mockito.mock(Spliterator.class), false);
        List<String> sa = Collections.singletonList("sa");
        ICampaignHandler campaignHandler = CampaignHandlerFactory.getCampaignHandler(ProcessorTypeEnum.RETRY_CAMPAIGN);

        System.out.println();
        System.out.println("============OUTSIDE ABC===========");
        System.out.println(sa);
        System.out.println(stream);
        System.out.println(campaignHandler);
    }
}

I have to mock statics call so that it return as my expectation

I followed steps:

  1. @RunWith(PowerMockRunner.class)
  2. @PrepareForTest({ Collections.class, StreamSupport.class, CampaignHandlerFactory.class})
  3. PowerMockito.mockStatic(clazz)
  4. Mockito.when(method call).thenReturn(my mock)
  5. Invoke method need to be tested

The result:

============INSIDE ABC===========
[sa]
java.util.stream.ReferencePipeline$Head@dffa30b
Mock for ICampaignHandler, hashCode: 81269359

============OUTSIDE ABC===========
Mock for List, hashCode: 628164202
Mock for Stream, hashCode: 1962826086
Mock for ICampaignHandler, hashCode: 81269359

Process finished with exit code 0

You guys can see 2/3 my stubbing setup does not work if the static calls are inside abc(), and it works if I copy static call outside abc() (copy to testing() directly). Only 1/3 stubbing works (inside and outside):

CampaignHandlerFactory.getCampaignHandler(param)   //this return as my expectiation

Hint: CampaignHandlerFactory is my implementation; Collections, StreamSupport are built-in classes. This is spring boot application

Test dependencies tree:

mvn test dependency:tree -DskipTests=true

[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ ota-service ---
[INFO] com.sirea.ota:ota-service:jar:0.0.1-SNAPSHOT
[INFO]  - com.sirea.ota:ota-logging:jar:0.0.1-SNAPSHOT:compile
[INFO] |   - org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO] |   - org.springframework.boot:spring-boot-starter-aop:jar:2.3.8.RELEASE:compile
[INFO] |  |   - org.springframework:spring-aop:jar:5.2.12.RELEASE:compile
[INFO] |  |  \- org.aspectj:aspectjweaver:jar:1.9.6:compile
[INFO] |   - com.sirea:logFormattor:jar:1.0.9:compile
[INFO] |  |  \- org.codehaus.janino:janino:jar:3.1.2:compile
[INFO] |  |     \- org.codehaus.janino:commons-compiler:jar:3.1.2:compile
[INFO] |   - org.springframework.boot:spring-boot-starter-web:jar:2.3.8.RELEASE:compile
[INFO] |  |   - org.springframework.boot:spring-boot-starter-json:jar:2.3.8.RELEASE:compile
[INFO] |  |  |   - com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.11.4:compile
[INFO] |  |  |   - com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.11.4:compile
[INFO] |  |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.11.4:compile
[INFO] |  |   - org.springframework:spring-web:jar:5.2.12.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-webmvc:jar:5.2.12.RELEASE:compile
[INFO] |  |     \- org.springframework:spring-expression:jar:5.2.12.RELEASE:compile
[INFO] |  \- org.springframework.boot:spring-boot-starter-jetty:jar:2.3.8.RELEASE:compile
[INFO] |      - jakarta.servlet:jakarta.servlet-api:jar:4.0.4:compile
[INFO] |      - jakarta.websocket:jakarta.websocket-api:jar:1.1.2:compile
[INFO] |      - org.eclipse.jetty:jetty-servlets:jar:9.4.35.v20201120:compile
[INFO] |     |   - org.eclipse.jetty:jetty-continuation:jar:9.4.35.v20201120:compile
[INFO] |     |   - org.eclipse.jetty:jetty-http:jar:9.4.35.v20201120:compile
[INFO] |     |   - org.eclipse.jetty:jetty-util:jar:9.4.35.v20201120:compile
[INFO] |     |  \- org.eclipse.jetty:jetty-io:jar:9.4.35.v20201120:compile
[INFO] |      - org.eclipse.jetty:jetty-webapp:jar:9.4.35.v20201120:compile
[INFO] |     |   - org.eclipse.jetty:jetty-xml:jar:9.4.35.v20201120:compile
[INFO] |     |  \- org.eclipse.jetty:jetty-servlet:jar:9.4.35.v20201120:compile
[INFO] |     |      - org.eclipse.jetty:jetty-security:jar:9.4.35.v20201120:compile
[INFO] |     |     |  \- org.eclipse.jetty:jetty-server:jar:9.4.35.v20201120:compile
[INFO] |     |     \- org.eclipse.jetty:jetty-util-ajax:jar:9.4.35.v20201120:compile
[INFO] |      - org.eclipse.jetty.websocket:websocket-server:jar:9.4.35.v20201120:compile
[INFO] |     |   - org.eclipse.jetty.websocket:websocket-common:jar:9.4.35.v20201120:compile
[INFO] |     |  |  \- org.eclipse.jetty.websocket:websocket-api:jar:9.4.35.v20201120:compile
[INFO] |     |   - org.eclipse.jetty.websocket:websocket-client:jar:9.4.35.v20201120:compile
[INFO] |     |  |  \- org.eclipse.jetty:jetty-client:jar:9.4.35.v20201120:compile
[INFO] |     |  \- org.eclipse.jetty.websocket:websocket-servlet:jar:9.4.35.v20201120:compile
[INFO] |      - org.eclipse.jetty.websocket:javax-websocket-server-impl:jar:9.4.35.v20201120:compile
[INFO] |     |   - org.eclipse.jetty:jetty-annotations:jar:9.4.35.v20201120:compile
[INFO] |     |  |   - org.eclipse.jetty:jetty-plus:jar:9.4.35.v20201120:compile
[INFO] |     |  |   - org.ow2.asm:asm:jar:9.0:compile
[INFO] |     |  |  \- org.ow2.asm:asm-commons:jar:9.0:compile
[INFO] |     |  |      - org.ow2.asm:asm-tree:jar:9.0:compile
[INFO] |     |  |     \- org.ow2.asm:asm-analysis:jar:9.0:compile
[INFO] |     |  \- org.eclipse.jetty.websocket:javax-websocket-client-impl:jar:9.4.35.v20201120:compile
[INFO] |     \- org.glassfish:jakarta.el:jar:3.0.3:compile
[INFO]  - com.sirea.common:sirea-logging:jar:1.2.0:compile
[INFO] |   - com.fasterxml.jackson.core:jackson-core:jar:2.11.4:compile
[INFO] |   - com.fasterxml.jackson.core:jackson-annotations:jar:2.11.4:compile
[INFO] |   - com.fasterxml.jackson.core:jackson-databind:jar:2.11.4:compile
[INFO] |  \- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] |     \- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO]  - com.sirea.ota:ota-common:jar:0.0.1-SNAPSHOT:compile
[INFO] |   - javax.validation:validation-api:jar:2.0.1.Final:compile
[INFO] |   - org.springframework.hateoas:spring-hateoas:jar:1.2.3:compile
[INFO] |  |   - org.springframework:spring-beans:jar:5.2.12.RELEASE:compile
[INFO] |  |   - org.springframework:spring-context:jar:5.2.12.RELEASE:compile
[INFO] |  |  \- org.springframework.plugin:spring-plugin-core:jar:2.0.0.RELEASE:compile
[INFO] |   - org.apache.commons:commons-lang3:jar:3.11:compile
[INFO] |   - org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
[INFO] |  |  \- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
[INFO] |   - javax.xml.bind:jaxb-api:jar:2.3.1:compile
[INFO] |  |  \- javax.activation:javax.activation-api:jar:1.2.0:compile
[INFO] |   - com.sirea.amp.partner.oemil:oemil-integration:jar:1.0.4-7:compile
[INFO] |  |   - com.nimbusds:nimbus-jose-jwt:jar:8.19:compile
[INFO] |  |  |  \- com.github.stephenc.jcip:jcip-annotations:jar:1.0-1:compile
[INFO] |  |  \- com.sirea.amp:amp-schema:jar:0.0.2-SNAPSHOT:compile
[INFO] |  |      - com.google.protobuf:protobuf-java:jar:3.14.0:compile
[INFO] |  |     \- com.google.protobuf:protobuf-java-util:jar:3.14.0:compile
[INFO] |  |        \- com.google.code.gson:gson:jar:2.8.6:compile
[INFO] |   - javax:javaee-api:jar:8.0.1:compile
[INFO] |  |  \- com.sun.mail:javax.mail:jar:1.6.2:compile
[INFO] |  |     \- javax.activation:activation:jar:1.1:compile
[INFO] |  \- org.bouncycastle:bcpkix-jdk15on:jar:1.68:compile
[INFO] |     \- org.bouncycastle:bcprov-jdk15on:jar:1.68:compile
[INFO]  - com.sirea.ota:server-interface-api:jar:0.0.1-SNAPSHOT:compile
[INFO]  - com.sirea.ota:ota-jpa:jar:0.0.1-SNAPSHOT:compile
[INFO] |   - org.flywaydb:flyway-core:jar:6.5.7:compile
[INFO] |  \- org.projectlombok:lombok:jar:1.18.16:compile
[INFO]  - com.sirea.ota:ota-converter:jar:0.0.1-SNAPSHOT:compile
[INFO] |   - com.bazaarvoice.jolt:jolt-core:jar:0.1.1:compile
[INFO] |  |  \- javax.inject:javax.inject:jar:1:compile
[INFO] |  \- com.bazaarvoice.jolt:json-utils:jar:0.1.1:compile
[INFO]  - com.sirea.ota:ota-rest-common:jar:0.0.1-SNAPSHOT:compile
[INFO] |   - com.google.guava:guava:jar:30.1-jre:compile
[INFO] |  |   - com.google.guava:failureaccess:jar:1.0.1:compile
[INFO] |  |   - com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:compile
[INFO] |  |   - com.google.code.findbugs:jsr305:jar:3.0.2:compile
[INFO] |  |   - org.checkerframework:checker-qual:jar:3.5.0:compile
[INFO] |  |   - com.google.errorprone:error_prone_annotations:jar:2.3.4:compile
[INFO] |  |  \- com.google.j2objc:j2objc-annotations:jar:1.3:compile
[INFO] |   - org.springframework.data:spring-data-commons:jar:2.3.6.RELEASE:compile
[INFO] |   - org.springframework.data:spring-data-redis:jar:2.3.6.RELEASE:compile
[INFO] |  |   - org.springframework.data:spring-data-keyvalue:jar:2.3.6.RELEASE:compile
[INFO] |  |   - org.springframework:spring-tx:jar:5.2.12.RELEASE:compile
[INFO] |  |   - org.springframework:spring-oxm:jar:5.2.12.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-context-support:jar:5.2.12.RELEASE:compile
[INFO] |   - io.lettuce:lettuce-core:jar:5.3.6.RELEASE:compile
[INFO] |  |   - io.netty:netty-common:jar:4.1.58.Final:compile
[INFO] |  |   - io.netty:netty-handler:jar:4.1.58.Final:compile
[INFO] |  |  |   - io.netty:netty-resolver:jar:4.1.58.Final:compile
[INFO] |  |  |   - io.netty:netty-buffer:jar:4.1.58.Final:compile
[INFO] |  |  |  \- io.netty:netty-codec:jar:4.1.58.Final:compile
[INFO] |  |   - io.netty:netty-transport:jar:4.1.58.Final:compile
[INFO] |  |  \- io.projectreactor:reactor-core:jar:3.3.13.RELEASE:compile
[INFO] |  |     \- org.reactivestreams:reactive-streams:jar:1.0.3:compile
[INFO] |   - org.apache.commons:commons-pool2:jar:2.8.1:compile
[INFO] |  \- commons-io:commons-io:jar:2.8.0:compile
[INFO]  - org.springframework.boot:spring-boot-starter-amqp:jar:2.3.8.RELEASE:compile
[INFO] |   - org.springframework.boot:spring-boot-starter:jar:2.3.8.RELEASE:compile
[INFO] |  |   - org.springframework.boot:spring-boot:jar:2.3.8.RELEASE:compile
[INFO] |  |   - org.springframework.boot:spring-boot-autoconfigure:jar:2.3.8.RELEASE:compile
[INFO] |  |   - org.springframework.boot:spring-boot-starter-logging:jar:2.3.8.RELEASE:compile
[INFO] |  |   - jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile
[INFO] |  |  \- org.yaml:snakeyaml:jar:1.26:compile
[INFO] |   - org.springframework:spring-messaging:jar:5.2.12.RELEASE:compile
[INFO] |  \- org.springframework.amqp:spring-rabbit:jar:2.3.4:compile
[INFO] |      - org.springframework.amqp:spring-amqp:jar:2.3.4:compile
[INFO] |     \- com.rabbitmq:amqp-client:jar:5.9.0:compile
[INFO]  - org.springframework.boot:spring-boot-starter-data-jpa:jar:2.3.8.RELEASE:compile
[INFO] |   - org.springframework.boot:spring-boot-starter-jdbc:jar:2.3.8.RELEASE:compile
[INFO] |  |   - com.zaxxer:HikariCP:jar:3.4.5:compile
[INFO] |  |  \- org.springframework:spring-jdbc:jar:5.2.12.RELEASE:compile
[INFO] |   - jakarta.transaction:jakarta.transaction-api:jar:1.3.3:compile
[INFO] |   - jakarta.persistence:jakarta.persistence-api:jar:2.2.3:compile
[INFO] |   - org.hibernate:hibernate-core:jar:5.4.27.Final:compile
[INFO] |  |   - org.jboss.logging:jboss-logging:jar:3.2.1.Final:compile
[INFO] |  |   - antlr:antlr:jar:2.7.7:compile
[INFO] |  |   - org.jboss:jandex:jar:2.1.3.Final:compile
[INFO] |  |   - com.fasterxml:classmate:jar:1.5.1:compile
[INFO] |  |   - org.dom4j:dom4j:jar:2.1.3:compile
[INFO] |  |   - org.hibernate.common:hibernate-commons-annotations:jar:5.1.2.Final:compile
[INFO] |  |  \- org.glassfish.jaxb:jaxb-runtime:jar:2.3.3:compile
[INFO] |  |      - org.glassfish.jaxb:txw2:jar:2.3.3:compile
[INFO] |  |      - com.sun.istack:istack-commons-runtime:jar:3.0.11:compile
[INFO] |  |     \- com.sun.activation:jakarta.activation:jar:1.2.2:runtime
[INFO] |   - org.springframework.data:spring-data-jpa:jar:2.3.6.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-orm:jar:5.2.12.RELEASE:compile
[INFO] |  \- org.springframework:spring-aspects:jar:5.2.12.RELEASE:compile
[INFO]  - com.sirea.atsp:oemResponseExtension:jar:1.0.2:compile
[INFO]  - redis.clients:jedis:jar:2.7.2:compile
[INFO]  - com.sirea.atsp:redis-client-wrapper:jar:1.1.0-SNAPSHOT:compile
[INFO]  - javax.el:javax.el-api:jar:3.0.0:test
[INFO]  - ru.yandex.qatools.allure:allure-junit-adaptor:jar:1.5.4:test
[INFO] |   - ru.yandex.qatools.allure:allure-java-aspects:jar:1.5.4:test
[INFO] |  |   - ru.yandex.qatools.allure:allure-java-adaptor-api:jar:1.5.4:test
[INFO] |  |  |   - ru.yandex.qatools.allure:allure-java-annotations:jar:1.5.4:test
[INFO] |  |  |  |  \- ru.yandex.qatools.allure:allure-model:jar:1.5.4:test
[INFO] |  |  |  |      - org.jvnet.jaxb2_commons:jaxb2-basics-runtime:jar:0.9.3:test
[INFO] |  |  |  |     \- ru.qatools.commons:properties:jar:2.0.RC5:test
[INFO] |  |  |  \- org.apache.tika:tika-core:jar:1.7:test
[INFO] |  |  \- org.aspectj:aspectjrt:jar:1.9.6:test
[INFO] |  \- junit:junit:jar:4.13.1:test
[INFO]  - org.powermock:powermock-module-junit4:jar:2.0.9:test
[INFO] |   - org.powermock:powermock-module-junit4-common:jar:2.0.9:test
[INFO] |  |   - org.powermock:powermock-reflect:jar:2.0.9:test
[INFO] |  |  |  \- net.bytebuddy:byte-buddy-agent:jar:1.10.19:test
[INFO] |  |  \- org.powermock:powermock-core:jar:2.0.9:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:2.2:test
[INFO]  - org.javassist:javassist:jar:3.20.0-GA:compile
[INFO]  - com.sirea.orchestrator:sirea-job-orchestrator:jar:1.0.2.RELEASE:compile
[INFO] |   - org.springframework.boot:spring-boot-starter-webflux:jar:2.3.8.RELEASE:compile
[INFO] |  |   - org.springframework.boot:spring-boot-starter-reactor-netty:jar:2.3.8.RELEASE:compile
[INFO] |  |  |  \- io.projectreactor.netty:reactor-netty:jar:0.9.16.RELEASE:compile
[INFO] |  |  |      - io.netty:netty-codec-http:jar:4.1.58.Final:compile
[INFO] |  |  |      - io.netty:netty-codec-http2:jar:4.1.58.Final:compile
[INFO] |  |  |      - io.netty:netty-handler-proxy:jar:4.1.58.Final:compile
[INFO] |  |  |     |  \- io.netty:netty-codec-socks:jar:4.1.58.Final:compile
[INFO] |  |  |     \- io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.58.Final:compile
[INFO] |  |  |        \- io.netty:netty-transport-native-unix-common:jar:4.1.58.Final:compile
[INFO] |  |   - org.springframework:spring-webflux:jar:5.2.12.RELEASE:compile
[INFO] |  |  \- org.synchronoss.cloud:nio-multipart-parser:jar:1.1.0:compile
[INFO] |  |     \- org.synchronoss.cloud:nio-stream-storage:jar:1.1.3:compile
[INFO] |   - org.springframework.boot:spring-boot-starter-actuator:jar:2.3.8.RELEASE:compile
[INFO] |  |   - org.springframework.boot:spring-boot-actuator-autoconfigure:jar:2.3.8.RELEASE:compile
[INFO] |  |  |  \- org.springframework.boot:spring-boot-actuator:jar:2.3.8.RELEASE:compile
[INFO] |  |  \- io.micrometer:micrometer-core:jar:1.5.10:compile
[INFO] |  |      - org.hdrhistogram:HdrHistogram:jar:2.1.12:compile
[INFO] |  |     \- org.latencyutils:LatencyUtils:jar:2.0.3:runtime
[INFO] |   - org.springframework.kafka:spring-kafka:jar:2.5.11.RELEASE:compile
[INFO] |  |   - org.springframework.retry:spring-retry:jar:1.2.5.RELEASE:compile
[INFO] |  |  \- org.apache.kafka:kafka-clients:jar:2.5.1:compile
[INFO] |  |      - com.github.luben:zstd-jni:jar:1.4.4-7:compile
[INFO] |  |      - org.lz4:lz4-java:jar:1.7.1:compile
[INFO] |  |     \- org.xerial.snappy:snappy-java:jar:1.1.7.3:compile
[INFO] |   - mysql:mysql-connector-java:jar:8.0.23:runtime
[INFO] |  \- org.springframework.cloud:spring-cloud-starter-stream-kafka:jar:3.0.13.RELEASE:compile
[INFO] |     \- org.springframework.cloud:spring-cloud-stream-binder-kafka:jar:3.0.13.RELEASE:compile
[INFO] |         - org.springframework.cloud:spring-cloud-stream-binder-kafka-core:jar:3.0.13.RELEASE:compile
[INFO] |        |  \- org.springframework.integration:spring-integration-kafka:jar:3.3.1.RELEASE:compile
[INFO] |        \- org.springframework.cloud:spring-cloud-stream:jar:3.0.13.RELEASE:compile
[INFO] |            - org.springframework.boot:spring-boot-starter-validation:jar:2.3.8.RELEASE:compile
[INFO] |           |  \- org.hibernate.validator:hibernate-validator:jar:6.1.7.Final:compile
[INFO] |           |     \- jakarta.validation:jakarta.validation-api:jar:2.0.2:compile
[INFO] |            - org.springframework.integration:spring-integration-core:jar:5.3.5.RELEASE:compile
[INFO] |            - org.springframework.integration:spring-integration-jmx:jar:5.3.5.RELEASE:compile
[INFO] |           \- org.springframework.cloud:spring-cloud-function-context:jar:3.0.14.RELEASE:compile
[INFO] |               - net.jodah:typetools:jar:0.6.2:compile
[INFO] |              \- org.springframework.cloud:spring-cloud-function-core:jar:3.0.14.RELEASE:compile
[INFO]  - org.powermock:powermock-api-mockito2:jar:2.0.9:test
[INFO] |   - org.powermock:powermock-api-support:jar:2.0.9:test
[INFO] |  \- org.mockito:mockito-core:jar:3.3.3:test
[INFO]  - org.springframework.boot:spring-boot-starter-test:jar:2.3.8.RELEASE:test
[INFO] |   - org.springframework.boot:spring-boot-test:jar:2.3.8.RELEASE:test
[INFO] |   - org.springframework.boot:spring-boot-test-autoconfigure:jar:2.3.8.RELEASE:test
[INFO] |   - com.jayway.jsonpath:json-path:jar:2.5.0:compile
[INFO] |  |  \- net.minidev:json-smart:jar:2.3:compile
[INFO] |  |     \- net.minidev:accessors-smart:jar:1.2:compile
[INFO] |   - jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.3:compile
[INFO] |  |  \- jakarta.activation:jakarta.activation-api:jar:1.2.2:compile
[INFO] |   - org.assertj:assertj-core:jar:3.18.1:test
[INFO] |   - org.hamcrest:hamcrest:jar:2.2:test
[INFO] |   - org.junit.jupiter:junit-jupiter:jar:5.6.3:test
[INFO] |  |   - org.junit.jupiter:junit-jupiter-api:jar:5.6.3:test
[INFO] |  |  |   - org.opentest4j:opentest4j:jar:1.2.0:test
[INFO] |  |  |  \- org.junit.platform:junit-platform-commons:jar:1.6.3:test
[INFO] |  |   - org.junit.jupiter:junit-jupiter-params:jar:5.6.3:test
[INFO] |  |  \- org.junit.jupiter:junit-jupiter-engine:jar:5.6.3:test
[INFO] |   - org.junit.vintage:junit-vintage-engine:jar:5.6.3:test
[INFO] |  |   - org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO] |  |  \- org.junit.platform:junit-platform-engine:jar:1.6.3:test
[INFO] |   - org.mockito:mockito-junit-jupiter:jar:3.3.3:test
[INFO] |   - org.skyscreamer:jsonassert:jar:1.5.0:test
[INFO] |  |  \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
[INFO] |   - org.springframework:spring-core:jar:5.2.12.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-jcl:jar:5.2.12.RELEASE:compile
[INFO] |   - org.springframework:spring-test:jar:5.2.12.RELEASE:test
[INFO] |  \- org.xmlunit:xmlunit-core:jar:2.7.0:test
[INFO]  - org.awaitility:awaitility:jar:3.0.0:test
[INFO] |   - org.hamcrest:hamcrest-library:jar:2.2:test
[INFO] |  \- org.objenesis:objenesis:jar:2.5.1:test
[INFO] \- org.awaitility:awaitility-proxy:jar:3.0.0:test
[INFO]    \- net.bytebuddy:byte-buddy:jar:1.10.19:compile

Question: So what is the problem here? Why my stubbing does not work if the static calls are inside abc(), but only CampaignHandlerFactory works?

Is there versions conflict?

CodePudding user response:

java.util.Collections and java.util.stream.StreamSupport are system classes (Language and utility libraries that are part of JRE). The caller of the system class should be defined in @PrepareForTest({ClassThatCallsTheSystemClass.class}).
See documentation.

The way to go about mocking system classes are a bit different than usual though. Normally you would prepare the class that contains the static methods (let's call it X) you like to mock but because it's impossible for PowerMock to prepare a system class for testing so another approach has to be taken. So instead of preparing X you prepare the class that calls the static methods in X!

So you need to add TestClazz.class into @PrepareForTest.
Correct definition:

@PrepareForTest({ CampaignHandlerFactory.class, TestClazz.class})

Execution test result:

============INSIDE ABC===========
Mock for List, hashCode: 1800605369
Mock for Stream, hashCode: 847606512
Mock for ICampaignHandler, hashCode: 1736458419

============OUTSIDE ABC===========
Mock for List, hashCode: 1800605369
Mock for Stream, hashCode: 847606512
Mock for ICampaignHandler, hashCode: 1736458419
  • Related