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

时间:2013-07-24 08:24:08

标签: java unit-testing testing junit

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

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

然而,这只是服务真正做到的一半。我的困境是,我是否应该尝试证明其他两个依赖服务是否实际上也适当地处理了数据?我的服务范围非常广泛,所以我想最好还要知道依赖服务是否也能很好地完成工作。然而,这已经超出了范围单元测试,并进入集成测试,对吧?

我有点困惑。

2 个答案:

答案 0 :(得分:0)

如果你问的是单元测试,那么这样做的方法是使用模拟或存根来隔离测试类。

但是,如果您认为仅仅这样做是不够的,您可以编写一些组件测试,您可以使用所有要测试的实际类,并使用存根(或内存) )数据库并模拟一些你认为对你要测试的内容不重要的依赖项。

过去,我已经测试了这种方式之间具有高度交互的小类集群(有时会跳过这些类的单元测试,因为组件测试涵盖了所有方案)。显然,执行此操作的问题在于,您测试的类越多,方案的数量几乎呈指数级增长。也许你可以测试桥和使用该桥的2个真实类。

答案 1 :(得分:0)

你应该同时做这两件事。

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

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