检查方法调用而不使用mock

时间:2016-04-02 05:18:13

标签: java unit-testing junit4

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

e.g。  它正在内部发生

zipWith3

我想像这样检查

obj.insert(Class1 param1,Class2 param2);

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

1 个答案:

答案 0 :(得分:1)

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

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

    关于,可以使用某些参数检查方法调用而不创建其模拟吗?

    AFAIK,我认为不可能。

      

    我无法创建所有类的模拟,因为内部使用了很多不同库的类。

    虽然你的类可能在内部使用了很多库,但是如果我们设计并将功能封装到单个类中并且测试中的类使用的是单独的类,那么我们所要做的就是模拟那些单独的类和不需要担心它正在使用的库。

    在这种情况下,

      像一个系统,从源读取数据并进行一些处理并将其信息写入数据库和文件。

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

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