首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java 8函数中的运行时异常

Java 8函数中的运行时异常
EN

Stack Overflow用户
提问于 2019-11-22 08:21:11
回答 1查看 112关注 0票数 0

我使用Java 8函数和转换器,并具有以下功能:

主类

代码语言:javascript
运行
AI代码解释
复制
public final class MainClass {
    public MainClass(
            final Function<InputModel, OutputModel> businessLogic,
            final Converter<Input, InputModel> inputConverter,
            final Converter<OutputModel, Output> outputConverter) {
        this.businessLogic = requireNonNull(businessLogic, "businessLogic is null.");
        this.inputConverter = requireNonNull(inputConverter, "inputConverter is null.");
        this.outputConverter = requireNonNull(outputConverter, "outputConverter is null.");
    }

    /**
     * Request Handler.
     */
    public Output handleRequest(final Input input) {
        requireNonNull(input, "input is null.");

        log.info("input request: {}", input);

        try {
            return inputConverter
                    .andThen(businessLogic)
                    .andThen(outputConverter)
                    .apply(input);
        } catch (final Exception ex) {
            throw new InternalServiceException(ex.getMessage(), ex);
        }
    }
}

单元测试

代码语言:javascript
运行
AI代码解释
复制
public final class TestClass {

    @Mock
    private Function<InputModel, OutputModel> mockedBusinessLogic;

    @Mock
    private Converter<Input, InputModel> mockedInputConverter;

    @Mock
    private Converter<OutputModel, Output> mockedOutputConverter;

    private MainClass mainClass = new MainClass(mockedBusinessLogic, mockedInputConverter, mockedOutputConverter);

    @Test
    public void handleRequest_SHOULD_throwException_WHEN_inputConverter_throwsException() {
        final RuntimeException inputConverterException = new NullPointerException(EXCEPTION_MESSAGE);

        // what should I mock here? apply or convert.. apply for `Converter` seems to be deprecated.
        when(mockedInputConverter.convert(input))
                .thenThrow(inputConverterException);

        final Exception exception = assertThrows(
                InternalServiceException.class,
                () -> mainClass.handleRequest(input)
        );

        assertThat(exception.getMessage(), is(EXCEPTION_MESSAGE));
        assertThat(exception.getCause(), is(inputConverterException));
    }
}

上述断言都失败了。我希望如果inputConverter抛出一个异常,handleRequest中的catch块会将它包装成InternalServiceException,但它似乎没有发生。

有什么帮助吗?我如何实际为handleRequest方法编写单元测试?我想测试inputConveterbusinessLogicoutputConveter中的任何一个抛出异常时的行为。

EN

回答 1

Stack Overflow用户

发布于 2019-11-22 09:42:36

代码中的所有内容都是一个模拟。当您在模拟的andThen上调用inputConverter时,将返回null或新的模拟实例(取决于配置)。每个andThen将返回一个带有链式转换器的新实例(至少这是我假设的)。

确保您模拟所有必需的方法,或者更好地使用从实类实例化的真实对象。

设置断点,然后进行调试,会帮助您找到问题。如果您在try-块中设置,然后单步遍历代码,您将看到代码中使用模拟的方式将无法工作。您还可以将andThen的每个结果保存在变量中,然后在调试器中签入每个结果的类型。我很肯定它会是null或者是“X类的伪装”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58998090

复制
相关文章
java运行时异常和非运行时异常区别_常用的运行时异常
Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。Java中的异常分为两大类:错误Error和异常Exception,Java异常体系结构如下图所示:
全栈程序员站长
2022/11/11
1.2K0
java运行时异常的特点是什么_java运行时异常与一般异常
这个异常的解释是 “程序遇上了空指针 “,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。
全栈程序员站长
2022/09/28
5880
Checked异常和Runtime异常的区别_JAVA运行时异常
程序在运行过程中出现的异常,RumtimeException 是 Exception 的一个子类 我们可以查看Java API 文档
全栈程序员站长
2022/11/11
7360
java中常见的运行时异常_java五种常见异常
ArithmeticException 算数运算异常,由于除数为0引起的异常; ClassCastException 类型转换异常,当把一个对象归为某个类,但实际上此对象并不是由这个类创建的,也不是其子类创建的,则会引起异常; ArrayStoreException 由于数组存储空间不够引起的异常; NullPointerException 空指针异常,程序试图访问一个空的数组中的元素或访问空的对象中的方法或变量时产生异常; IndexOutOfBoundsExcention 索引越界异常,由于数组下标越界或字符串访问越界引起异常; ConcurrentModificationException 并发修改异常; NoSuchElementException 找不到元素异常; UnsupportedOperationException 不支持请求异常;(使用Arrays工具类的asList将数组转成集合增加元素时,会报此异常)
全栈程序员站长
2022/09/27
5000
在Java8的Consumer中抛出异常
最近在实现公司内部一个通用svn数据工具类,其中有段代码是拿到当前更新后的数据进行下一步操作,用的是java8的Consumer实现的,代码如下:
Erwin
2021/03/04
4K1
浅谈Java异常及其编译时异常和运行时异常的区别[通俗易懂]
异常是程序编码和运行时经常发生的事件,了解异常有助于我们提高代码质量,增强系统的健壮性,这里总结一下Java编程中的异常、以及Java编译时异常和运行时异常的区别,并列举几种常见的异常,以供参考学习。
全栈程序员站长
2022/11/11
1.8K0
浅谈Java异常及其编译时异常和运行时异常的区别[通俗易懂]
Java【8】异常处理
编译错误–因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置;
哲洛不闹
2020/07/02
6400
运行时异常与非运行时异常的区别
java提供了两种异常机制。一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption)(非运行时异常)。
全栈程序员站长
2022/06/30
9600
java中的异常
异常:直观的理解就是不正常,不完全正确,可能存在某些问题。在实际编写程序的过程中,往往可能出于疏忽而导致程序出现bug。典型的有数组越界,除0等,在c语言中由于考虑到程序实际的效率而未考虑数组下标越界引起的程序错误,如果在编写程序涉及到数组的边界问题而未考虑,几乎100%会发生如下的bug。合理的处理异常,会使得程序的健壮性,可读性以及可维护性得到大大的提高。
lexingsen
2022/02/24
9720
java中的异常
Java中的异常
Java 中的异常(Exception)是指在程序执行过程中出现了错误或异常情况,导致程序无法正常执行的情况。Java 中的异常分为两种类型:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
堕落飞鸟
2023/04/02
6900
技巧 | Java 8 Stream 中异常处理的4种方式
Stream API 和 lambda 是 Java8以来对Java的重大改进。从那时起,我们可以使用更具有功能性的语法风格的代码。但是有个问题就是,我们使用了 lambda 表达式,那 lambda 中的异常该怎么处理呢。
用户1516716
2019/05/17
7.7K0
java中的异常和异常处理
Java的基本理念是“结构不佳的代码不能运行”,在我们进行编写代码的时候一般通过编译的时候就可以看出代码是否有错误,但是在这一阶段并不能处理完成所有的异常,如一些不可预知的情况,在运行期间才会暴露。所以Java中对异常做出了如下归类。
袁新栋-jeff.yuan
2020/08/26
2K0
java中的异常和异常处理
Java 8 开始新增的 Optional 类 - Optional 对象中的异常
在 orElse() 和 orElseGet() 方法之外,JDK 还添加了一个 orElseThrow() 方法,JDK 使用这个方法来处理对象为空的情况。
HoneyMoose
2022/05/18
5340
Java 8 开始新增的 Optional 类 - Optional 对象中的异常
Java 8 函数式编程Java 8 函数式编程
java.util.function.* @FunctionalInterface 都是函数接口,没有成员(状态)
林万程
2018/09/29
1.2K0
Java编码指南:Java 8 Lambda-Streams中的异常如何优雅处理
Java 8 Lambda-Streams让我们一步迈入了函数式编程的世界,使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java 的语言表达能力得到了提升。
崔认知
2023/06/20
4060
Java编码指南:Java 8 Lambda-Streams中的异常如何优雅处理
Java 中的异常处理
在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。
崔笑颜
2020/06/08
1.4K0
【Kotlin】Kotlin 与 Java 互操作 ③ ( Kotlin 中处理 Java 异常 | Java 中处理 Kotlin 异常 | @Throws 注解处理异常 | 函数类型互相操作 )
在 Java 函数中 抛出 异常 , 如果 在 Java 中调用该 抛出异常 的函数 , 则 必须处理该异常 , 否则编译时就会报
韩曙亮
2023/03/30
1.2K0
【Kotlin】Kotlin 与 Java 互操作 ③ ( Kotlin 中处理 Java 异常 | Java 中处理 Kotlin 异常 | @Throws 注解处理异常 | 函数类型互相操作 )
Java中的异常处理
Java的基本设计思想是“Badly formed code will not be run!”。这句话的大致意思是:错误形式的代码不会被运行。 我们在写代码的时候,提升错误恢复能力是提升代码健壮的重要措施。而“为了创建一个更加健壮的系统,那么每一个组件都必须是健壮的”。从而,在Java中出现了异常处理机制。 不像C语言,基本处理错误的代码都是程序员写上去的,而在Java中,除非是要自己自定义异常的时候,我们一般都是通过异常处理代码块来解决问题的。不但提高了代码的健壮性,还提高了代码的可读性。 那么,异常处理的定义是什么呢?当程序运行时出现了异常(不是错误),可能是空指针异常等等很多异常,能够对当前出现异常的代码进行处理,或是直接报告异常,或是将异常抛给特定的位置进行决断处理。 同大多数的需求一样,异常处理也被设计者设计成了一个类:Throwable。在这个类的下面,又有Error(错误)、和Exception(异常)。Error(错误)一般情况下不会通过代码进行处理,因为一般能报错误的情况,都是十分严重的情况,大多数错误都是由JVM(Java虚拟机)引起的。例如下面的代码:
roobtyan
2019/02/21
1.3K0
Java中的异常处理
java中的异常总结
一般面试中java Exception(runtimeException )是必会被问到的问题
哲洛不闹
2018/09/19
1.4K0
Java中异常的种类
就是指在程序运行过程中发生非常严重的错误,导致程序无法继续正常运行,甚至崩溃或宕机,这种错误不是不可以恢复,但恢复需要很大 代价(比较重启系统,重启服务器) 。
用户7886150
2021/04/06
1K0

相似问题

Java 8流中的聚合运行时异常

46

抛出异常的Java 8 Lambda函数?

16569

在CompletableFuture中处理java8中的运行时异常

11

Java8 Lambda函数赋值异常

27

Java 8中消费者函数的异常处理

57
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档