Java Spring中依赖于用户的bean定义

Java Spring中依赖于用户的bean定义,java,spring,integration-testing,Java,Spring,Integration Testing,我正在创建一个基于Spring的Web应用程序,其中我使用Spring将服务的实现添加到定义的接口中。到目前为止,这是标准的。很好 我希望允许用户在其会话的运行时覆盖应用程序行为。为此,我希望spring根据用户会话更改接口后面的实现 它的一个用例是在INT上运行的自动测试用例,应该测试系统创建的电子邮件的输出。在INT上,有一个电子邮件服务配置为向我们的邮件服务器发送电子邮件。我不希望测试用例必须使用邮件协议检查邮件。我希望在运行自动测试用例的情况下,让电子邮件实现将电子邮件作为注释写入HTM

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

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

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

spring中是否有一个概念可以帮助我实现这样一个特性,或者我必须自己创建它

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

通常通过以下方式完成:

使用spring测试模块设置测试,该模块允许您创建用于测试的spring上下文,并将bean注入到测试类中, 除了创建一个单独的spring概要文件,其中默认的邮件服务实现被替换为一个mock, 编写一个测试用例,在其中模拟用户以编程方式完成的步骤,最后断言类似assertEquals、mailServiceMock.getLastEmail的内容。
从您的问题来看,不清楚您为什么会偏离上述标准方法。如果你解释了你的理由,也许会更容易找到合适的答案。

听起来是个不错的选择——一个用于生产,一个用于测试。听起来有点奇怪。如果创建自动测试,通常需要测试一个模块、一起测试一些模块或测试应用程序。如果您逐个更改一个模块,您将使用该测试模块测试应用程序,但不会测试其在现实生活中的行为-您可能需要创建一些集成或单元测试来验证其他模块的行为。我要测试应用程序,为此我需要测试发送的电子邮件的内容。但是我不想测试邮件库、邮件服务器和某种邮件客户端的实现。当然,这会更真实,但它让事情变得更复杂,我认为它带来的问题比好处多。