0

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

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

然而,这只是该服务实际功能的一半。我的困境是我是否应该尝试证明其他两个依赖服务是否也正确地处理了数据?我的服务范围很广,所以我想最好也知道依赖服务是否也做得很好。然而,这超出了单元测试的范围,并进入了集成测试,对吗?

我在这里有点困惑。

4

2 回答 2

0

你应该两者都做。

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

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

于 2013-07-24T08:43:09.583 回答
0

如果您询问单元测试,那么这样做的方法是使用模拟或存根单独测试该类。

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

过去,我以这种方式测试了它们之间具有高度交互性的类的小集群(有时会跳过这些类的单元测试,因为组件测试涵盖了所有场景)。显然,这样做的问题在于,随着您测试的类越多,场景的数量几乎呈指数增长。也许您可以测试桥和使用该桥的 2 个真实类。

于 2013-07-24T08:40:29.777 回答