以下是我的主要代碼。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();的實例;您可以在下面查看我的測試用例代碼。@Testpublic 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();}無論我做什么,我都不會打:否則if(numOfRecords> 0)我返回的數字大于0。就好像records.count();一樣。甚至沒有在模擬中執(zhí)行。對于任何約定或StackOverflow問題語法錯誤,我深表歉意。我是Java社區(qū)的新手。
1 回答

飲歌長嘯
TA貢獻1951條經驗 獲得超3個贊
您mock2.count()
沒有發(fā)生任何事情,因為count()
在您要測試的方法中調用之前,您將重新分配records
給的結果consumer.poll(10000);
。
您需要創(chuàng)建模擬,說mockRecords
和mockConsumer
;然后注入consumer
您創(chuàng)建的模擬。然后加入一個存根線
doReturn(mockRecords).when(mockConsumer).poll(10000);
在您致電之前run
。
添加回答
舉報
0/150
提交
取消