【问题标题】:Best approach to integration test a Flex/Java web application via Maven?通过 Maven 集成测试 Flex/Java Web 应用程序的最佳方法?
【发布时间】:2010-10-17 04:16:45
【问题描述】:

我正在开发一个具有 100% Flex UI 的 web 应用程序,该项目通过 Blaze 与运行在应用程序服务器上的 Java 后端进行通信。该团队已经创建了许多单元测试,但只为持久性模块创建了集成测试。现在我们想知道集成测试其他部分的最佳方法。这是我们现在拥有的Maven模块,我相信这是一个非常典型的设计:

服务器端:

1) 一个 Java 域模块——它只有单元测试

2) 一个 Java 持久性模块 (DAO) -- 现在它只有集成测试,可以与实时数据库对话以测试 DAO,这里没有真正的单元测试

3) 一个 Java 服务模块——现在它只有单元测试

客户端:

4) 打包为 SWC 并与 Java 后端对话的 Flex 服务模块——目前这根本没有测试

5) 在 Flex 服务模块之上实现 Flex UI 的 Flex 客户端模块 - 目前只有单元测试(我们使用 MATE 创建了一个松散耦合的客户端,视图中没有逻辑)。

这 5 个模块被打包成一个 WAR,可以部署在应用服务器或 servlet 容器中。

这是我的 4 个问题:

  1. 我们应该向服务模块添加集成测试,还是考虑到持久模块具有集成测试并且服务模块已经具有单元测试,这是否是多余的?似乎 Flex-Services 模块的集成测试具有更高的优先级,并且会同时运行服务模块。
  2. 我们喜欢将集成测试保留在其模块中的想法,但 Flex 服务模块和 WAR 模块存在循环性。 Flex 服务模块的集成测试不能在没有应用服务器的情况下运行,因此这些测试将具有 战争结束后来,是吗?
  3. 什么是好的技术 集成测试 Flex 客户端 UI(例如,类似 Selenium,但对于 Flex)?
  4. 我们是否应该将最终集成测试放在 WAR 模块或创建一个单独的 在 WAR 之后构建的集成测试模块?

非常感谢任何帮助/意见!

【问题讨论】:

    标签: java apache-flex web-applications integration-testing maven


    【解决方案1】:

    更多的是提示而不是强有力的答案,但不妨看看fluint(以前的dpUInt)和Continuous Integration with Maven, Flex, Fliunt, and Hudson 博客文章。

    【讨论】:

    • 不错的链接。我们使用 Hudson 作为我们的 CI 工具,所以很高兴阅读。但是,我们已经在使用 FlexUnit 进行 Flex 单元测试。这篇文章虽然讨论了持续集成的过程,但没有解决“集成测试”,显然,他们没有这样做:-(这太糟糕了。
    • @HDave 我至少想提一下 Fluint,它被宣传为 Flex 单元和集成测试框架。但我必须说,我在那个领域没有任何实践经验,我对 Flex 和 BlazeDS 的了解非常有限。
    【解决方案2】:

    首先,只是一些澄清。当您说“4) 打包为 SWC 的 Flex 服务模块”时,您的意思是我收集的 Flex 服务库作为 RSL 加载。与将服务编写为运行时模块相比,这是一个重要的区别,因为后者可以(并且通常会)实例化服务控制器本身并将服务连接分发到其他模块。您的替代方案,只是您在每个模块中构建的库,这意味着它们都创建了自己的服务控制器实例。您最好将服务逻辑放入一个模块中,应用程序可以在加载其他模块之前加载该模块并管理服务之间的移动。

    例如。

    Application.swf - 启动、初始化 IoC 容器、加载 Services.swf、注入所需的任何依赖项

    Services.swf 加载、建立与服务器的连接、管理所需的服务集合

    Application.swf 将 Services.swf 中的托管实例添加到它的容器中(使用某种形式的上下文感知来防止冲突)

    Application.swf 加载 ModuleA.swf,注入它需要的任何依赖项

    ModuleA.swf 加载(列出了来自注入的 Services.swf 的依赖项),使用这些依赖项来联系它需要的服务。

    也就是说,按照你目前的结构,我会尽可能准确地回答你的问题。

    1. 您想在集成中测试什么?您的服务在那里并返回您期望我收集的内容。因此,如果在 BlazeDS 中使用远程对象,那么您可以编写测试以确保您可以找到端点、可以找到通道、存在目标、所有远程方法都按预期返回。服务器团队正在测试数据存储(从它们到数据库并返回),但您正在测试您的客户端和服务器之间的合同是否仍然有效。该合约适用于任何假设 - 例如有效载荷上返回的值对象、现有的远程方法等。

    2. (参见下面的#4)测试应该在他们的模块中,但是我在这里要说的是,你真的应该有一个模块来提供服务(而不是我上面建议的库)。无论如何,是的,仍然将测试工件部署到本地 Web 服务器(使用 Jetty 或类似的),并确保集成测试目标取决于您使用的 WAR 打包器。

    3. 我发现一些开发人员将 UI/功能测试与集成测试互换。虽然您确实可以同时执行这两者,但在 Flex 中仍然有自动集成测试的空间,其中加载了 Web 服务器并检查核心服务以确保它们存在并返回所需的内容。对于 UI/功能测试,Adobe 维护了一个很好的资源集合:http://www.adobe.com/products/flex/related/#ftesting。对于我提到的集成测试,

    4. 集成测试应该有自己的目标,这取决于打包的 WAR 项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2010-09-08
      • 2013-04-23
      • 2015-07-31
      • 2010-09-12
      相关资源
      最近更新 更多