我有一个Spring 4 JUnit测试,该测试只能验证我的应用程序的特定部分。

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:context-test.xml")
@ActiveProfiles("test")
public class FooControllerIntegrationTest {
     ...
}


因此,我不想配置和实例化实际上未涉及到我的测试范围的所有bean。例如,我不想配置在另一个控制器中使用的bean,在这里我将不对其进行测试。

但是,由于我不想缩小组件扫描的路径,因此出现“没有合格的豆类型”异常:


  造成原因:
  org.springframework.beans.factory.NoSuchBeanDefinitionException:否
  [...类型的合格豆


如果我当然确定我没有在测试中涉及功能,该如何忽略这些遗漏的定义?

最佳答案

如果我当然确定我没有在测试中涉及功能,该如何忽略这些遗漏的定义?


不,没有用于此目的的自动化或内置机制。

如果您指示Spring加载对其他bean具有强制性依赖关系的bean,则这些其他bean必须存在。

出于测试目的,限制活动bean范围的最佳实践包括配置的模块化(例如,水平切片可让您有选择地选择加载应用程序的哪些层)以及bean定义配置文件的使用。

如果您使用的是Spring Boot,则还可以在Spring Boot Test中使用“测试片”或@MockBean / @SpyBean

但是,请记住,加载在给定集成测试中未使用的bean通常不是一件坏事,因为(希望)测试实际上在测试中其他测试类中需要这些bean的其他组件套件,然后ApplicationContext将仅加载一次并在您不同的集成测试类中缓存。

问候,

Sam(Spring TestContext Framework的作者)

09-04 06:22
查看更多