java - Spring 中用户相关的 bean 定义

标签 java spring integration-testing

我正在创建一个基于 Spring 的 Web 应用程序,其中使用 Spring 将服务的实现添加到定义的接口(interface)中。到目前为止,都是标准的。工作正常。

我想允许用户在运行时覆盖其 session 的应用程序行为。为此,我希望 spring 根据用户 session 更改接口(interface)背后的实现。

其中一个用例是在 INT 上运行的自动测试用例,并且应该测试系统创建的电子邮件的输出。在 INT 上,配置了一个电子邮件服务,用于将电子邮件发送到我们的邮件服务器。我不希望测试用例必须使用邮件协议(protocol)检查邮件。我希望万一运行自动测试用例来改变电子邮件实现,将电子邮件作为 HTML 的注释写入,这样我的测试就可以轻松检查结果。因此,在更多这样的情况下,最好针对特殊情况更改实现 bean。

Spring中有一个概念可以帮助我实现这样的功能还是我必须自己创建它?

附加信息:这都是关于自动化验收测试。该测试在我们与手动测试人员共享的系统上运行。 => 手动测试人员希望收到一封真实的测试电子邮件 => 自动测试通过不接收电子邮件而仅检查具有较少依赖性的电子邮件内容来降低复杂性。 如果我们有两个系统,一个是为人类需求而配置的,另一个是为了自动化测试需求而配置的,那就没有问题了。但事实并非如此,因此我需要一种方法来更改运行时的系统行为。

最佳答案

通常通过以下方式完成:

  1. 使用 spring-test 模块设置测试,该模块允许您创建用于测试的 spring 上下文并将 bean 注入(inject)到您的测试类中,
  2. 使用与生产相同的上下文文件进行测试,除了创建一个单独的 spring 配置文件,其中默认邮件服务实现替换为模拟,
  3. 编写一个测试用例,在其中以编程方式模拟用户完成的步骤,最后断言类似 assertEquals("<expected_email_text>", mailServiceMock.getLastEmail()) 的内容。 .

从您的问题来看,尚不清楚为什么您会偏离上述标准方法。如果您解释了原因,也许会更容易找到合适的答案。

关于java - Spring 中用户相关的 bean 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363023/

相关文章:

java - Android字节码验证码

java - 当光标放在按钮上时更改按钮的位置

java - 如何在android studio中仅使用View Tag使用图像作为背景图像?

java - 在 Spring Boot 应用程序中加载第三方 jar 的问题

java - 如何使用 Java 8 在 Spring 4 中执行 queryForList?

java - 在 Java 中用 n 替换新行

java - 具有 Spring Security 和 Java 配置的自定义身份验证管理器

unit-testing - Joomla 3.0——用于测试目的的独立应用程序

java - 模拟 bean 的依赖项的 NoSuchBeanDefinitionException

unit-testing - 集成测试所需的数据库数据;通过 API 调用或使用导入的数据创建?