1

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

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

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

春天是否有一个概念可以帮助我实现这样的功能,还是我必须自己创建?

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

4

1 回答 1

0

它通常通过以下方式完成:

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

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

于 2013-03-13T09:11:05.427 回答