Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 Mockito中模拟类构造函数_Java_Unit Testing_Apache Kafka_Mockito_Powermock - Fatal编程技术网

Java 在方法PowerMock Mockito中模拟类构造函数

Java 在方法PowerMock Mockito中模拟类构造函数,java,unit-testing,apache-kafka,mockito,powermock,Java,Unit Testing,Apache Kafka,Mockito,Powermock,我在尝试使用PowerMock模拟类时遇到了一个问题。首先,这里是我当前的gradle依赖项: testCompile group: 'junit', name: 'junit', version: '4.12' testCompile "org.mockito:mockito-core:2.+" testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.2' testCompile gr

我在尝试使用PowerMock模拟类时遇到了一个问题。首先,这里是我当前的gradle依赖项:

testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile "org.mockito:mockito-core:2.+"
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.2'
testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.2'
我正试图模拟打给卡夫卡经纪人的电话。代码如下所示:

public class MyConsumer {
    public Consumer<Long, String> createConsumer() {
        ...
        Consumer<Long, String> consumer = new KafkaConsumer<>(props);
        consumer.subscribe(TOPIC);
        ....
    }
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyConsumer.class)
public class MyConsumerTest {

    @Test
    public void testCreateConsumer() {
        ...
        KafkaConsumer mockConsumer = mock(KafkaConsumer.class);
        doNothing().when(mockConsumer).subscribe(TOPIC);
        PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments().thenReturn(mockConsumer);

        Consumer<Long, String> result = myConsumerInstance.createConsumer();
        ...
    }
}
当我尝试运行测试时,它们从未开始,我得到以下错误:

> Task :compileTestJava FAILED
/Users/myuser/myproject/src/test/java/myConsumerTest.java:101: error: unreported exception Exception; must be caught or declared to be thrown
       PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments().thenReturn(mockConsumer);
                                                                 ^
Note: /Users/myuser/myproject/src/test/java/myConsumerTest.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /Users/myuser/myproject/src/test/java/myConsumerTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

FAILURE: Build failed with an exception.

Kafka.analyticsConsumerTest > testCreateConsumer FAILED
    java.lang.RuntimeException at PowerMockTestNotifierImpl.java:84
        Caused by: org.mockito.exceptions.base.MockitoException at MethodRoadie.java:87
所以我想我会把这句话总结一下,试着获得更多关于出错原因的信息。当我这样做时,测试会运行,但该特定测试会失败,并出现以下错误:

> Task :compileTestJava FAILED
/Users/myuser/myproject/src/test/java/myConsumerTest.java:101: error: unreported exception Exception; must be caught or declared to be thrown
       PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments().thenReturn(mockConsumer);
                                                                 ^
Note: /Users/myuser/myproject/src/test/java/myConsumerTest.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /Users/myuser/myproject/src/test/java/myConsumerTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

FAILURE: Build failed with an exception.

Kafka.analyticsConsumerTest > testCreateConsumer FAILED
    java.lang.RuntimeException at PowerMockTestNotifierImpl.java:84
        Caused by: org.mockito.exceptions.base.MockitoException at MethodRoadie.java:87
我一辈子都没弄明白如何从中提取更多的信息。以前有人遇到过这样的事情吗

我目前的工作理论是关于卡夫卡消费阶级是如何返回消费者的?此实例中的消费者是
org.apache.kafka.clients.Consumer.Consumer
。也许我没有正确地嘲笑这一点?如蒙协助,将不胜感激


谢谢你的建议,但是如果你重读上面的内容,我已经做到了。这就是我如何让运行时异常出现的原因。除非我误解了你的意思

也许你那边少了些什么? 检查下面的例子,它对我有用

格拉德尔:

dependencies {

    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile "org.mockito:mockito-core:2.+"
    testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.2'
    testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.2'

    compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.4.0'
}
单元测试:

import java.util.Arrays;
import java.util.Collection;
import java.util.Properties;

import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.KafkaConsumer;
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(MyConsumerTest.MyConsumer.class)
public class MyConsumerTest {

    private static final Collection<String> TOPIC = Arrays.asList("1");

    static class MyConsumer {

        public Consumer<Long, String> createConsumer() {

            Properties props = new Properties();
            Consumer<Long, String> consumer = new KafkaConsumer<>(props);
            consumer.subscribe(TOPIC);

            return consumer;
        }
    }

    @Test
    public void testCreateConsumer() throws Exception {

        KafkaConsumer<?,?> mockConsumer = PowerMockito.mock(KafkaConsumer.class);
        PowerMockito.doNothing().when(mockConsumer).subscribe(TOPIC); // default behaviour, line is not required
        PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments().thenReturn(mockConsumer);

        MyConsumer myConsumerInstance = new MyConsumer();
        Consumer<Long, String> result = myConsumerInstance.createConsumer();

    }
}
导入java.util.array;
导入java.util.Collection;
导入java.util.Properties;
导入org.apache.kafka.clients.consumer.consumer;
导入org.apache.kafka.clients.consumer.KafkaConsumer;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.powermock.api.mockito.PowerMockito;
导入org.powermock.core.classloader.annotations.PrepareForTest;
导入org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyConsumerTest.MyConsumer.class)
公共类支原体试验{
私有静态最终集合主题=Arrays.asList(“1”);
静态类支原体{
公共消费者(createConsumer){
Properties props=新属性();
消费者=新卡夫卡消费者(道具);
消费者。订阅(主题);
退货消费者;
}
}
@试验
public void testCreateConsumer()引发异常{
KafkaConsumer mockConsumer=PowerMockito.mock(KafkaConsumer.class);
PowerMockito.doNothing().when(mockConsumer.subscribe(主题);//默认行为,不需要第行
PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments()。然后返回(mockConsumer);
MyConsumer myConsumerInstance=新的MyConsumer();
消费者结果=myConsumInstance.createConsumer();
}
}

谢谢你的建议,但是如果你重读上面的内容,我已经做到了。这就是我如何让运行时异常出现的原因。除非我误解了你的意思

也许你那边少了些什么? 检查下面的例子,它对我有用

格拉德尔:

dependencies {

    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile "org.mockito:mockito-core:2.+"
    testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.2'
    testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.2'

    compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.4.0'
}
单元测试:

import java.util.Arrays;
import java.util.Collection;
import java.util.Properties;

import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.KafkaConsumer;
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(MyConsumerTest.MyConsumer.class)
public class MyConsumerTest {

    private static final Collection<String> TOPIC = Arrays.asList("1");

    static class MyConsumer {

        public Consumer<Long, String> createConsumer() {

            Properties props = new Properties();
            Consumer<Long, String> consumer = new KafkaConsumer<>(props);
            consumer.subscribe(TOPIC);

            return consumer;
        }
    }

    @Test
    public void testCreateConsumer() throws Exception {

        KafkaConsumer<?,?> mockConsumer = PowerMockito.mock(KafkaConsumer.class);
        PowerMockito.doNothing().when(mockConsumer).subscribe(TOPIC); // default behaviour, line is not required
        PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments().thenReturn(mockConsumer);

        MyConsumer myConsumerInstance = new MyConsumer();
        Consumer<Long, String> result = myConsumerInstance.createConsumer();

    }
}
导入java.util.array;
导入java.util.Collection;
导入java.util.Properties;
导入org.apache.kafka.clients.consumer.consumer;
导入org.apache.kafka.clients.consumer.KafkaConsumer;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.powermock.api.mockito.PowerMockito;
导入org.powermock.core.classloader.annotations.PrepareForTest;
导入org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyConsumerTest.MyConsumer.class)
公共类支原体试验{
私有静态最终集合主题=Arrays.asList(“1”);
静态类支原体{
公共消费者(createConsumer){
Properties props=新属性();
消费者=新卡夫卡消费者(道具);
消费者。订阅(主题);
退货消费者;
}
}
@试验
public void testCreateConsumer()引发异常{
KafkaConsumer mockConsumer=PowerMockito.mock(KafkaConsumer.class);
PowerMockito.doNothing().when(mockConsumer.subscribe(主题);//默认行为,不需要第行
PowerMockito.whenNew(KafkaConsumer.class).withAnyArguments()。然后返回(mockConsumer);
MyConsumer myConsumerInstance=新的MyConsumer();
消费者结果=myConsumInstance.createConsumer();
}
}

您的代码无法编译,因为
withAnyArguments()
引发选中的异常。您需要重新播放它或添加
try catch
块。谢谢您的建议,但是如果您重新阅读上面的内容,我已经这样做了。这就是我如何让运行时异常出现的原因。除非我误解了你的意思@第二个例子对你没有帮助,考虑将完整的StAdTrack添加到你的问题中。你的代码无法编译,因为<代码>和AyAguMuths]()/Cyto>抛出了一个检查异常。您需要重新播放它或添加
try catch
块。谢谢您的建议,但是如果您重新阅读上面的内容,我已经这样做了。这就是我如何让运行时异常出现的原因。除非我误解了你的意思@第二个例子对你没有帮助,考虑把完整的StActTrack添加到你的问题中。