在集成开发期间模拟/存储“第三方”服务

时间:2013-11-20 01:57:06

标签: java integration jboss7.x cdi stubbing

我目前正在处理的应用程序正在由3个独立的团队进行,每个团队在一天结束时聚集在一起的不同功能区域上工作。困难在于让三支球队始终保持同步,并且不会让一支球队的问题影响到另一支球队。我正在寻找一种方法,我可以存根/模拟其他团队提供的某些服务的调用,以便我们可以在大多数时间单独工作,但在需要时快速切换回集成模式。

理想情况下我想:

- during normal development, I could turn on a flag and those services will be mock services (for example, when I am just developing away on my part of the code and don't really care if the other team's service returns the right thing, just that it returns something)
- I don't want to have add code to check this flag everywhere in the code and if it is on, use the mock, else use the real thing... I just want it to automatically know to use the mock class when this flag is on

我们正在使用Java 7 + CDI + Jboss。这可能与某种接线或滤波器有关吗?

TIA。

2 个答案:

答案 0 :(得分:0)

在基于Spring的应用程序中(使用依赖注入),我通过保留两个应用程序上下文来实现这一点,一个配置为使用存根,一个配置为使用实际代码。我编写了一些包装器代码来在适当的时候加载适当的应用程序上下文,但您可以通过其他方式进行管理,即使用不同类路径的单独运行目标。

就存根而言,我经常手工创建它们(即包装固定数据电子表格或生成随机数据的书面存根服务),但Mockito在构建某些类型的存根时可能很有用。

根据您需要存储的资源类型(以及您是否有预算),另一个选项是服务虚拟化。我没有使用服务虚拟化工具的任何直接经验,但我当前的客户端使用商业LISA工具来存根SOA服务层。我认为有几家公司出售类似的工具。

答案 1 :(得分:0)

使用替代方法可以实现这种更好的方法,您可以在需要时切换回集成模式,并在beans.xml中禁用替代方法

CDI替代品对模拟服务非常有用。

但是,您可以通过使用替代方案在部署时做出选择,而不必更改应用程序的源代码。

替代品通常用于以下目的:

To handle client-specific business logic that is determined at runtime

To specify beans that are valid for a particular deployment scenario
   (for example, when country-specific sales tax laws require 
   country-specific sales tax business logic)

To create dummy (mock) versions of beans to be used for testing

替代方法允许您使用beans.xml文件在执行时覆盖它 - 一个简单的部署工件。

典型的情况是为不同的环境使用不同的beans.xml,从而为您不希望在本地/集成环境中执行的组件启用模拟替代方案。

Using Alternatives in CDI Applications