0

我有一个 bean 的多个模拟实现,该 bean 被引用为 beanA。可以说 Mock 的参考名称:beanAMock1、beanAMock2 ... beanAMockN。

在上下文文件中,我根据上下文占位符 beanAImplementation 为 beanA 引用别名:

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

还有其他具有像这样的模拟实现的bean(beanB,beanC ...)。而且我有一些测试套装,它们使用他们特定的 beanA、beanB ......实现集。

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

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

我知道三种方法可以做到这一点:

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

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

3)手动在测试套件中创建上下文并覆盖所需的属性 - 我需要在测试套件中编写许多代码。

还有其他方法吗?(可能像#3,但使用 SpringJUnit4ClassRunner 或其子类,如果可以在注释中提供所需的属性 - 这似乎是一种最佳方法)

4

1 回答 1

0

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

于 2013-08-10T09:44:26.383 回答