我有一个类似的系统,它从源读取数据并进行一些处理并将其信息写入数据库和文件。是否可以使用某些参数检查方法调用而无需创建其模拟?我知道它可以通过Mockito完成,但它只适用于模拟对象,而不是真实对象。在这种情况下,我无法创建所有类的模拟,因为内部使用了很多不同库的类。
e.g。 它正在内部发生
zipWith3
我想像这样检查
obj.insert(Class1 param1,Class2 param2);
但obj应该是Mock对象来检查这种方式,而不是真实的。
答案 0 :(得分:1)
在使用真实对象进行测试之前,需要考虑几点。
关于,可以使用某些参数检查方法调用而不创建其模拟吗?
AFAIK,我认为不可能。
我无法创建所有类的模拟,因为内部使用了很多不同库的类。
虽然你的类可能在内部使用了很多库,但是如果我们设计并将功能封装到单个类中并且测试中的类使用的是单独的类,那么我们所要做的就是模拟那些单独的类和不需要担心它正在使用的库。
在这种情况下,
像一个系统,从源读取数据并进行一些处理并将其信息写入数据库和文件。
我想你想对这个功能进行单元测试。假设我们已将它们封装到单独的接口中,假设SourceReader
(读取并处理数据)和SinkWriter
(写入db和file)。我会模拟这两个接口并单元测试被测试的类是否在这些模拟对象上使用适当的参数调用必要的方法。
在我看来,如果系统不允许我们模拟对象,我怀疑并会考虑重构代码。因为单元测试的目标之一是促进更好的设计(特别是基于行为的单元测试),如果我们不能轻松进行单元测试,则意味着代码变得复杂并需要进行一些重构。