从JUnit测试文件指定Spring上下文属性的一部分

从JUnit测试文件指定Spring上下文属性的一部分,spring,junit4,Spring,Junit4,我有一个bean的多个模拟实现,该bean被引用为beanA。Mock的引用名称是:beanAMock1,beanAMock2。。。比纳莫肯 在上下文文件中,我根据上下文占位符beanA实现对beanA引用使用别名: <alias name="${beanAImplementation}" alias="beanA"/> 还有其他bean(beanB、beanC…)具有类似这样的模拟实现。我有一些测试套装,利用他们特定的一套beanA,beanB。。。实现 所有bean的切换占

我有一个bean的多个模拟实现,该bean被引用为beanA。Mock的引用名称是:beanAMock1,beanAMock2。。。比纳莫肯

在上下文文件中,我根据上下文占位符beanA实现对beanA引用使用别名:

<alias name="${beanAImplementation}" alias="beanA"/>

还有其他bean(beanB、beanC…)具有类似这样的模拟实现。我有一些测试套装,利用他们特定的一套beanA,beanB。。。实现

所有bean的切换占位符都有默认值,这些占位符在上下文中包含的属性文件中指定

我正在寻找一种方法来改变每个测试套件的bean实现的一部分

我知道三种方法:

1) 为每个测试套件创建额外的上下文文件,该测试套件将从单独的属性文件加载所需的属性-这种方式需要为每个测试套件创建两个额外的文件(上下文,属性)

2) 使用别名定义为每个测试套件创建配置文件。据我所知,这需要为每个概要文件中的每个bean提供别名,而我有一组默认的bean实现

3) 在测试套件中手动创建上下文并覆盖所需的属性——有了这些,我需要在测试套件中编写许多代码


还有别的办法吗?(可能类似于#3,但使用SpringJUnit4ClassRunner或其子类,如果可以只在注释中提供所需的属性,这似乎是最好的方法)

我通过将SpringJUnit4ClassRunner子类化并覆盖其子类解决了这个问题 TestContextManager创建TestContextManager(类clazz)方法。此方法接受测试套件的类对象,并在创建上下文之前调用。所以,可以从测试套件类中读取其他注释,并设置系统属性,这些属性将在上下文创建期间替换相应的占位符