当前位置: 首页 > 知识库问答 >
问题:

PowerMockito模拟静态无法正常工作

山乐生
2023-03-14

我有一个类需要测试:

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
    }

}

和一个测试类:

@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);
    }
}

我必须模拟静态调用,以便它按我的预期返回

我遵循以下步骤:

  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. 调用方法需要测试

结果:

============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

你们可以看到2/3我的存根设置不起作用,如果静态调用在abc()内部,如果我在abc()外部复制静态调用(直接复制到test(),它就会起作用。只有1/3的存根工作(内部和外部):

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

提示:CampaignHandlerFactory是我的实现;集合、StreamSupport是内置类。这是spring启动应用程序

测试依赖树:

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

问:那么这里的问题是什么?为什么如果静态调用在abc()中,而只能使PolignHandlerFactory工作,那么我的存根就不起作用了?

是否存在版本冲突?

共有1个答案

韶弘壮
2023-03-14

java.util。集合和<code>java.util.stream。StreamSupport是系统类(属于JRE的语言和实用程序库)。系统类的调用者应该在<code>@PrepareForTest({classThatCallsSystemClass.class})中定义。
请参阅文档。

不过,模拟系统类的方法与通常的有点不同。通常,您会准备包含您喜欢模拟的静态方法(让我们称之为X)的类,但因为PowerMock不可能准备一个系统类进行测试,所以必须采取另一种方法。所以不要准备X,而是准备在X中调用静态方法的类!

所以需要将< code>TestClazz.class添加到< code>@PrepareForTest中。< br >正确的定义:

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

执行测试结果:

============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
 类似资料:
  • 编辑: 感谢所有的回复。我找到了解决办法。我试图模拟一个方法findById,它不是直接在User.class中,而是在用户扩展的genericModel.class中。现在一切都很完美。

  • 问题内容: 我正在尝试模拟私有静态方法。见下面的代码 这是我的测试代码 但是我运行的每个瓦片都会出现此异常 我想我在嘲弄东西时做错了什么。有什么想法我该如何解决? 问题答案: 为此,您可以使用和。 此外,您必须在测试类中指定PowerMock运行器,并准备要进行测试的类,如下所示: 希望对您有帮助。

  • 在尝试模拟InetAddress中的静态方法时,我遇到了奇怪的问题。我成功地能够为许多其他类模拟静态方法,并且一切正常,但InetAddress显示不同的行为。我使用的是JUnit 4. x、Mockito 1.9.5 下面给出了使用Mockito和PowerMock以及InetAddress模拟的测试- 当我将下面给出的方法放入某个实用程序InetAddress中时。getLocalHost()

  • 我想从一个包含两个静态方法m1和M2的类中模拟一个静态方法m1。并且我希望方法m1返回一个对象。 我尝试了以下操作 2)但在执行m1时不调用它。

  • 当所有参数都在使用匹配器时,为什么我会得到这个异常?如何解决?我调试了它,发现返回null。 当我将注释添加到测试类并运行测试时,junit不会做出响应。为什么? 编辑 我试着不使用论据匹配器,结果