26

据我了解,TestExecutionListeners 的行为类似于@BeforeClassJUnit 中的方法。我不明白为什么我需要使用DependencyInjectionTestExecutionListenerTransactionalTestExecutionListener使用。DirtiesContextTestExecutionListenerDbUnitTestExecutionListener

通常没有 DbUnit,我可以创建和填充数据库。为什么我突然需要使用这些侦听器来CRUD为我的数据库做一些事情?

4

1 回答 1

43

TestExecutionListeners为在 Spring TestContext Framework 中运行的测试提供各种类型的功能。

如果您对特定侦听器的作用感兴趣,最好的方法是阅读相应类的 Javadoc。此外,Spring 参考手册的测试章节详细介绍了如何使用每个侦听器以及它们的作用。

在您的特定情况下,如果您不使用@DirtiesContext,那么您不需要使用DirtiesContextTestExecutionListener. 至于DependencyInjectionTestExecutionListenerTransactionalTestExecutionListener,您可能需要它们将依赖项注入您的测试(例如,通过@Autowired@Inject@Resource等)和事务测试(即,用 注释的测试@Transactional)。

另请注意,默认情况下启用上述侦听器。因此,如果您一直在使用没有任何自定义侦听器(如 DbUnit)的 Spring TestContext 框架,那么您永远不会意识到侦听器的存在。参考手册中有关TestExecutionListener 配置的部分也应该有助于澄清事情。但是请注意,某些功能(如默认侦听器的合并和自动检测)仅在 Spring Framework 4.1+ 中可用。

问候,

Sam (Spring TestContext 框架的作者)

于 2014-12-09T22:06:10.277 回答