我知道在Spring应用程序的集成测试上下文中,我们可以使用注解:
@MockBean
将mock对象添加到Spring应用程序上下文中,mock将替换应用程序上下文中任何现有的相同类型的bean。@Autowired
可用于从上下文注入bean
这一切都非常方便和美好,但我不明白这是如何发生/这是如何实现的。
据我所知,我们可以测试在自己的进程中运行Tomcat服务器的软件,当服务器启动时,Spring将创建并连接我们定义的所有bean,即所谓的应用程序上下文。
如何从另一个进程(我们正在运行测试的Junit进程)操作应用程序上下文?
我们如何使用@Autowired
从那里查找bean,反之亦然,使用@MockBean
创建bean?
看起来应用程序上下文好像被两个进程共享了...
我确信我在这里错过了一些知识,任何指向资源,以帮助我了解正在发生的事情将不胜感激。
2条答案
按热度按时间4zcjmb1e1#
为了简单起见,这一切都是由项目中包含的Spring测试集成库完成的。(例如@SpringBootTest或@DataJpaTest)它们指示junit扩展其引擎以启动一个测试“风格”的 Spring 引导上下文,然后该上下文负责创建和自动装配“真实的的”依赖项(就像使用@Autowired注解时一样),或者创建模拟,然后自动连接它们,而不是真实的的依赖项
yfjy0ee72#
你的测试框架和你的测试代码运行相同的过程(即在相同的JVM中),因此你的测试和测试框架可以不受任何限制地交互(除了标准的JVM限制)。另外Spring提供了扩展,例如JUnit,以提供对bean,上下文,配置等的轻松访问和操作。