这个问题是Can I use code to control the dependency resolution Decisions made by ApplicationContext in Spring Boot? 的续集。
@SpringBootTest
可接受的答案是在每个测试夹具类中定义一个嵌套类,对其进行注释@TestConfiguration
并在其中为需要解析的每个 bean 定义一个工厂方法。嵌套类的影响范围仅限于测试装置,影响装置中的所有测试,但不影响其他装置中定义的测试。
当在每个测试装置中运行测试时,这提供了对注入组件的依赖项的细粒度控制。
这种方法的问题是它需要在每个测试夹具类中添加一个嵌套的解析器类。这是不可扩展的。考虑一个具有 10 个测试装置的项目。其中 9 个使用相同的注入依赖项,只有第 10 个仅需要一个特定接口的不同实现。
在这种情况下,我需要将测试配置类复制到 9 个测试夹具类中,并仅在第 10 个测试中使用第二个配置类。
我需要一种更具可扩展性的方法来做到这一点。例如,在上面的情况下,我希望能够定义两个配置类,一个用于测试装置使用的两种配置中的每一种。然后我希望能够为每个测试装置指定应使用两个配置类中的哪一个。我努力了:
我尝试使用注释将一个文本夹具的嵌套配置类导入到另一个测试夹具中@Import
,但这样做时,后者中的配置类被忽略。
我还尝试将嵌套配置类移动到上层,以便它可以用于未明确将不同配置类定义为嵌套类的所有测试装置,但在这种情况下,所有测试装置都会忽略配置类。
总之,我正在寻找一种有效的方法,该方法允许我只编写每个配置类一次,然后有选择地将一个配置类应用于每个 SpringBootTest 类,而无需复制它。
PIPIONE
相关分类