单元测试服务,其作为两个其他服务之间的中介

问题描述:

我有一个服务,它作为两个其他服务之间的中介。它基本上验证输入,然后依次将它们传递给这两个服务(通过尝试保持事务完整性),然后,如果一切顺利,则将结果保存到数据库。单元测试服务,其作为两个其他服务之间的中介

我现在的问题是单独测试此服务。当然,我可以提供存根来满足依赖关系。我还可以测试输入的验证,是否在正常情况下将适当的数据保存在数据库中,以及是否存在任何依赖关系抛出异常时是否保留事务完整性。

然而,这只是服务的一半。我的两难问题是,如果我应该尝试证明其他两个依赖项服务是否实际处理了适当的数据?我的服务范围相当广泛,所以我想最好也知道依赖服务是否也做得很好。然而,这退出了示波器单元测试,并进入集成测试,对吧?

我有点困惑在这里。

如果你问的是单元测试,那么做的方法是使用模拟或存根来隔离测试类。如果你觉得仅仅这样做还不够,你可以写一些组件测试,在那里你使用所有你想测试的真实类,并且使用存根(或内存)数据库和模拟一些您认为对您要测试的内容不重要的依赖项。在过去,我测试了以这种方式在它们之间具有高交互的类的小群集(并且有时会跳过这些类的单元测试,因为组件测试涵盖了所有场景)。很显然,这样做的问题在于,您测试的课程越多,情景的数量就会呈指数增长。也许你可以测试桥和使用该桥的2个真实类。

你应该这样做。

对于单元测试,绝对使用模拟对象进行依赖关系,最好使用像EasyMock这样的工具。作为旁注,如果您觉得您的中介服务的功能对于单元测试来说过于宽泛,您可能需要考虑将其分解为更小的部分。

当然,您还应该使用真正的依赖关系进行集成测试,以确保您的服务按照预期一起工作。