gpt4 book ai didi

java - JUnit 4.xx (Java) 尝试获取行覆盖范围时出现 Mockito 问题

转载 作者:行者123 更新时间:2023-12-02 02:05:16 25 4
gpt4 key购买 nike

以下是我的主要代码。

public class KafkaConsumerForTests {

private ConsumerRecords<String, String> records;
private GenericKafkaConsumer<String, String> consumer;

@Override
public void run() {

try {

while (true) {

LOGGER.logp(Level.INFO, CLASS_NAME, "run()", "Attempting to Poll");
records = consumer.poll(10000);
int numOfRecords = records.count();

**if (numOfRecords == 0) {** // I want to get line coverage for this branch

LOGGER.logp(Level.INFO, CLASS_NAME, "run()", "No Response. Invalid Topic");
break;
}

**else if(numOfRecords > 0) {** // I want to get line coverage for this branch.

LOGGER.logp(Level.INFO, CLASS_NAME, "run()", "Response Received");
}
}

} catch (WakeupException e) {
consumer.close();
}

}

}

正如您所看到的,我想要获取以下分支的行覆盖率,以测试它是否正确记录。我尝试模拟 Records.count(); 的实例您可以在下面查看我的测试用例代码。

@Test
public void testRunWithZeroRecords() throws IOException {

KafkaConsumerForTests consumerThread3 = spy(new KafkaConsumerForTests("topic_pleasestuff", "lmao"));

ConsumerRecords<String, String> mock2 = mock(ConsumerRecords.class);

consumerThread3.records = mock2;

when(mock2.count()).thenReturn(9);

consumerThread3.run();

//verify(mock2, times(1)).count();
}

无论我做什么,我都不会击中:

else if(numOfRecords > 0)

我返回一个大于 0 的数字。就好像 records.count(); 甚至没有在模拟中执行。对于任何约定或 StackOverflow 问题语法错误,我深表歉意。我是 Java 社区的新手。

最佳答案

您的 mock2.count() 没有发生,因为在您正在测试的方法中调用 count() 之前,您重新分配了 记录consumer.poll(10000);的结果。

您需要创建模拟,例如 mockRecordsmockConsumer;然后用您创建的模拟注入(inject) consumer 。然后包括像

这样的短线
doReturn(mockRecords).when(mockConsumer).poll(10000);

在调用run之前。

关于java - JUnit 4.xx (Java) 尝试获取行覆盖范围时出现 Mockito 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com