我们希望将 Selenium 测试引入我们的 Maven 构建过程。令人高兴的是,有大量关于如何执行此操作的信息可用,但我无法弄清楚如何处理我们的其中一项要求。
为了分离我们的测试层,我们希望使用模拟服务对象进行 ui 测试。我们在单元测试中使用的 Spring 配置文件中已经定义了所有这些对象。在单元测试中连接这些服务很容易(我们使用@ContextConfiguration),但是当我们将 war 部署到 Jetty 以进行 Selenium 测试时,我不知道如何处理这种配置交换。
我们正在使用:
- Spring MVC 3.0
- 专家
- hudson
最佳答案
最差:引入特殊的用户/界面参数/复选框/角色。在应用程序中,请记住在代码中的任何地方为这种特殊情况使用模拟。维护很糟糕,容易出错,而且,让我们面对现实吧,非常蹩脚。最常见的你...
最简单解决方案:在您的 Spring 应用程序上下文中开发条件包含:
<import resource="services-${env}.xml"/>
其中 ${env} 来自 pom.xml
:
<properties>
<env>prd</env> <!-- or test depending on build profile -->
</properties>
记得开启资源filtering并使用 build profiles .
在进行 Selenium 测试时。切换可以在 Maven 构建期间或通过其他一些过滤工具完成。这两个文件(services-prd.xml
和 services-test.xml
)定义了相同的 beans(相同的接口(interface)和/或 id),但当然后者使用模拟实现.
最佳(恕我直言):如果您需要在运行时更改实现,AOP + JMX 会很棒。只需用方面包装您的真实服务,并根据某些标志(可通过 JMX 访问),使用真实服务或模拟。非常干净且无创。
关于testing - 如何在 Selenium ui 测试期间交换模拟服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5251454/