首页 > 解决方案 > 如何为 Overide 方法编写 Junit 测试

问题描述

如何为覆盖方法编写单元测试?代码看起来像这样,但我无法为覆盖方法获得更多代码覆盖。

public MessageHandler handler() {
    return new MessageHandler() {
        @SneakyThrows
        @Override
        public void handleMessage(Message<?> message) throws MessagingException {
            log.info("Fetching " + message.getPayload());
            var file = (File) message.getPayload();

            var content = Files.readString(Path.of(file.getPath()));

            List<String> fields = Arrays.stream(content.split(";"))
                    .map(String::trim)
                    .collect(Collectors.toList());

            if(((File) message.getPayload()).getName().startsWith("ACH")) {
                log.info("Backup: ", file);
                sftpGetAway.sendToSftpUploaded(file);
            }else {
                log.info("Backup: ", file);
                sftpGetAway.sendToSftpNonUploaded(file);
            }

            processFile(((File) message.getPayload()).getName(), fields);
        }
    };
}

单元测试代码是这样的。

  @Test
public void handler() throws BadRequestException, IOException {
    Message<?> message = MessageBuilder.withPayload("@inboundtest.start()")
            .setHeader("SOME_HEADER_KEY", "SOME_HEADER_VALUE")
            .build();

    MessageHandler hand = Mockito.spy(MessageHandler.class);

    doNothing().when(hand).handleMessage(any(Message.class));
    MessageHandler handler = processAchServiceImp.handler();
    hand.handleMessage(message);
    Assert.assertNotNull(handler);
}

测试运行良好,但覆盖率无法增加。

标签: javajunitmockitocode-coverage

解决方案


好像你在嘲笑班级undertest

MessageHandler hand = Mockito.spy(MessageHandler.class);
doNothing().when(hand).handleMessage(any(Message.class));

你应该嘲笑你的依赖。此链接应提供有关您的问题的更多解释。


推荐阅读