开发者社区> 问答> 正文

Java 类单元测试用例的编写流程是什么?

已解决

Java 类单元测试用例的编写流程是什么?

展开
收起
游客lmkkns5ck6auu 2022-10-26 18:10:22 625 0
1 条回答
写回答
取消 提交回答
  • 推荐回答
    1. 定义对象阶段 第 1 步是定义对象阶段,主要包括定义被测对象、模拟依赖对象(类成员)、注入 依赖对象(类成员)3 大部分。 1) 定义被测对象 在编写单元测试时,首先需要定义被测对象,或直接初始化、或通过 Spy 包装…… 其实,就是把被测试服务类进行实例化。 2) 模拟依赖对象(类成员) 在一个服务类中,我们定义了一些类成员对象——服务(Service)、数据访问对象 (DAO)、参数(Value)等。在 Spring 框架中,这些类成员对象通过@Autowired、 @Value 等方式注入,它们可能涉及复杂的环境配置、依赖第三方接口服务……但是, 在单元测试中,为了解除对这些类成员对象的依赖,我们需要对这些类成员对象进 行模拟。 3) 注入依赖对象(类成员) 当模拟完这些类成员对象后,我们需要把这些类成员对象注入到被测试类的实例中。 以便在调用被测试方法时,可能使用这些类成员对象,而不至于抛出空指针异常。

    2. 模拟方法阶段 第 2 步是模拟方法阶段,主要包括模拟依赖对象(参数或返回值)、模拟依赖方法 2 大部分。 1) 模拟依赖对象(参数或返回值) 通常,在调用一个方法时,需要先指定方法的参数,然后获取到方法的返回值。所 以,在模拟方法之前,需要先模拟该方法的参数和返回值。 2) 模拟依赖方法 在模拟完依赖的参数和返回值后,就可以利用 Mockito 和 PowerMock 的功能,进 行依赖方法的模拟。如果依赖对象还有方法调用,还需要模拟这些依赖对象的方法。

    3. 调用方法阶段 第 3 步是调用方法阶段,主要包括模拟依赖对象(参数)、调用被测方法、验证参 数对象(返回值)3 步。 1) 模拟依赖对象(参数) 在调用被测方法之前,需要模拟被测方法的参数。如果这些参数还有方法调用,还 需要模拟这些参数的方法。 2) 调用被测方法 在准备好参数对象后,就可以调用被测试方法了。如果被测试方法有返回值,需要 定义变量接收返回值;如果被测试方法要抛出异常,需要指定期望的异常。 3) 验证数据对象(返回值) 在调用被测试方法后,如果被测试方法有返回值,需要验证这个返回值是否符合预 期;如果被测试方法要抛出异常,需要验证这个异常是否满足要求。

    4. 验证方法阶段 第 4 步是验证方法阶段,主要包括验证依赖方法、验证数据对象(参数)、验证依 赖对象 3 步。 1) 验证依赖方法 作为一个完整的测试用例,需要对每一个模拟的依赖方法调用进行验证。 2) 验证数据对象(参数) 对应一些模拟的依赖方法,有些参数对象是被测试方法内部生成的。为了验证代码 逻辑的正确性,就需要对这些参数对象进行验证,看这些参数对象值是否符合预期。 3) 验证依赖对象 作为一个完整的测试用例,应该保证每一个模拟的依赖方法调用都进行了验证。正 好,Mockito 提供了一套方法,用于验证模拟对象所有方法调用都得到了验证。

    以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版

    2022-10-26 20:22:00
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
如何通过 Serverless 提高 Java 微服务治理效 立即下载
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载