我有一个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的作者)