技术开发 频道

通过服务模拟来简化SOA开发

    提供程序开发

    此 SOA 开发流程的第四步是由提供程序开发团队实现通过服务测试的服务。

    此时,提供程序团队已经准备好,可以进行服务开发了。既然他们还没有开始实现服务,怎么可能进行服务开发呢?幸运的是,他们已经开发了描述服务应如何工作的服务用例,开发人员就是开发人员,他们已经开始考虑如何实现服务了。开发人员已经创建了服务测试,这些测试可说明服务的 API 是什么,并帮助演示服务的行为。他们已经开发了服务模拟,这些模拟是表示实际服务将如何工作的快速原型。

    因此,开发人员已经非常明确如何实现服务,只是尚未实现其相关的任何代码而已。

    这几乎是毫无疑问的,但开发人员实现的服务必须通过服务测试。他们如何知道自己已经完成服务实现工作了呢?当服务通过了所有测试后,服务就已完全实现了。在开发期间,团队的开发活动可能会让他们添加要测试的其他功能。训练有素的团队不会放弃这些想法,而将对其进行捕获并添加到服务的测试集中。服务实现也必须通过这些测试。提供程序团队还应该向其他提供程序团队和协调程序团队通报这些添加的测试,以便所有团队的测试集保持同步。

    理想的情况下,提供程序团队将可以成功地实现通过测试的服务,而不必修改已达成一致的测试。不过,这经常被证明是不切实际的。当开发人员实现服务时,他们有时会发现需要更改服务的接口或行为。如果服务测试的质量良好,而开发人员更改了服务的工作方式,则测试就不能再通过了。为了使测试仍然有效,开发人员必须修改测试,使其可以验证新的设计。更改测试意味着服务模拟现在将不能通过测试,因此也必须对其进行更改,以实际模拟服务现在的工作方式。

    如果提供程序开发人员更改了服务测试或服务模拟,他们需要尽快通知协调程序开发人员和该服务的任何其他提供程序的开发人员。任何使用旧测试和模拟的人员都在根据一个现在已经过时的协议进行开发,因此各个团队需要根据新测试和模拟进行同步。如果其他团队拒绝接受新测试和模拟,则重新同步的工作就变成了团队之间的重新协商点。他们仍然有希望就服务用例达成一致,以从此处继续开展工作,从而开发一组一致认可的测试和模拟。

    示例提供程序实现

    提供程序开发团队将开发实现 StockQuoteService 的类或组件,其工作方式与 StockQuoteMock 类似,并使股票报价测试能够通过。模拟是一个包含硬编码响应的简单对象,而此提供程序是提供实际行为的组件。该实现应该执行以下操作:

    1.支持所有有效股票代码(至少支持提供程序的股票交易中涉及到的所有股票)。

    2.确保使用包含所支持股票的实时价格的数据库。

    3.将数据库使用的价格格式转换为服务返回的格式。

    4.将数据库针对无效代码的输入结果(如空查询结果)转换为服务希望的错误。

    5.实现服务的协议,如 EJB 远程接口、HTTP Web 服务或 JMS 请求和答复消息。

    由于模拟和实际提供程序实现相同的接口——在此例中为 Java 接口 StockQuoteService,因此服务测试可以使用两个实现中的任何一个;只要使用要实例化的正确类对测试进行配置即可。为了运行测试,您还需要使用测试期望的股票价格对数据库进行配置。

0
相关文章