gpt4 book ai didi

java - 除 RunTimeException 之外的代码覆盖率未覆盖

转载 作者:行者123 更新时间:2023-11-30 05:45:26 26 4
gpt4 key购买 nike

我正在为下面的java代码编写Junit代码覆盖率,并且该代码没有覆盖Otherthan Runtime Exception

请找到我的下面的java代码。

public class NotifySupervisorJobTask implements Tasklet {

private static final Logger LOGGER = LoggerFactory.getLogger(NotifySupervisorJobTask.class);

@Autowired
private CoreClient client;

@Autowired
private ItemProcessFailedNotifier itemProcessFailedNotifier;

@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
try {
client.notifySupervisor(null);
LOGGER.info("notifySupervisorJobTask - execute() called");
} catch (RuntimeException exception) {
String errorMessage = format("Error in triggering notify supervisor job. Task will be repeated at next scheduled time. Error is: [%s]", exception.getMessage());
LOGGER.error(errorMessage, exception);
contribution.setExitStatus(FAILED);
itemProcessFailedNotifier.notifyByEmailOnException(chunkContext.getStepContext(), new Exception(errorMessage,
exception));

}
return RepeatStatus.FINISHED;
}

}

请找到我的测试用例代码,用于运行时异常之外的情况。

@InjectMocks 私有(private)NotifySupervisorJobTask notifySupervisorJobTask;

@Mock
private ItemProcessFailedNotifier itemProcessFailedNotifier;

@Mock
private CoreClient client;

private ChunkContext chunkContext;

private StepContext stepContext;

@Before
public void setUp() {
chunkContext = mock(ChunkContext.class);
stepContext = mock(StepContext.class);
when(chunkContext.getStepContext()).thenReturn(stepContext);
}

@Test(expected = Exception.class)
public void shouldThrowExceptionOtherThanRuntimeException() throws Exception {
Exception ex = mock(Exception.class);
doThrow(ex).when(client).notifySupervisor(null); // Line not covered
notifySupervisorJobTask.execute(null, chunkContext); // Line not covered
verify(itemProcessFailedNotifier).notifyByEmailOnException(stepContext, ex); // Line not covered
}

最佳答案

你不能告诉 Mockito 抛出一个模拟方法不可能抛出的异常。

在 Java 中,有检查异常和非检查异常。在您的情况下,未选中的是 RuntimeException 的子类。检查所有其他(包括 Exception 类本身),但它们必须被捕获或在周围的方法签名中声明。

由于您的 notifySupervisor 方法显然没有声明任何已检查的异常(否则您的 execute 方法将无法编译),Mockito 无法违背编译器并抛出异常它的模拟出现了这样的异常。

关于java - 除 RunTimeException 之外的代码覆盖率未覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54926413/

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