gpt4 book ai didi

java - 不使用mock检查方法调用

转载 作者:行者123 更新时间:2023-12-01 10:07:06 24 4
gpt4 key购买 nike

我有一个类似的系统,它从源读取数据并进行一些处理并将其信息写入数据库和文件。是否可以使用某些参数检查方法调用而不创建其模拟?我知道它可以通过 Mockito 完成,但它仅适用于模拟对象,不适用于真实对象。在这种情况下,我无法创建所有使用的类的模拟,因为内部使用了许多不同库的类。

例如 这是内部发生的

obj.insert(Class1 param1,Class2 param2);

我想这样检查

verify(obj,times(12)).insert(any(),any());

但是 obj 应该是 Mock 对象来检查这种方式,而不是真实的。

最佳答案

在使用真实对象进行测试之前需要考虑的几点。

  1. 一旦我们使用真实对象进行测试,它就不再是单元测试,而是变成集成测试,您将使用真实的外部服务(例如数据库)进行测试。
  2. 这将使您的测试通过或失败取决于外部服务可用性的状态,并且比使用模拟进行的正常单元测试需要更多时间。

Regarding, possible to check method invocation with certain parameters without creating its mock?

据我所知,我认为这是不可能的。

I cannot create mock of all classes used as there are lot classes of different libraries is used internally.

尽管您的类可能在内部使用大量库,但如果我们已将功能设计并封装到各个类中,并且被测试的类正在使用各个类,那么我们所要做的就是模拟这些各个类并不需要担心它正在使用的库。

在这种情况下,

a system like, reads data from a source and does some processing and writes its information to database and a file.

我认为您想对该功能进行单元测试。假设我们已将它们封装到单独的接口(interface)中,假设为 SourceReader (读取和处理数据)和 SinkWriter (写入数据库和文件)。我将仅模拟这两个接口(interface),并单元测试被测类是否在这些模拟对象上使用适当的参数调用必要的方法。

在我看来,如果系统不允许我们模拟对象,我会怀疑并会考虑重构代码。因为单元测试的目标之一是促进更好的设计(尤其是基于行为的单元测试),如果我们无法轻松进行单元测试,则意味着代码变得复杂并且需要进行一些重构。

关于java - 不使用mock检查方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369499/

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