我知道如果我需要使用精确的实现TestExecutionListener
,它将阻止加载默认的TestExecutionListeners。
如果我的测试类是
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({MyCustomTestExecutionListener.class})
@ContextConfiguration(locations = { "classpath:test-ApplicationContext.xml" })
public class CabinetMembershipServiceImplTest {
...
}
MyCustomTestExecutionListener
将是唯一加载的侦听器,它会使我的测试执行失败。
当我启动我的测试时,指定任何TestExecutionListener,并且我在Spring的日志中挖掘,我可以找到:
getDefaultTestExecutionListenerClassNames :
Loaded default TestExecutionListener class names from location [META-INF/spring.factories]:
[org.springframework.test.context.web.ServletTestExecutionListener,
org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener,
org.springframework.test.context.support.DependencyInjectionTestExecutionListener,
org.springframework.test.context.support.DirtiesContextTestExecutionListener,
org.springframework.test.context.transaction.TransactionalTestExecutionListener,
org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
因此,如果我想添加我的TestExecutionListener,我需要在我的测试类中指定(除了想要的实现)所有这些默认的TestExectionListener:
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
ServletTestExecutionListener.class,
DirtiesContextBeforeModesTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
SqlScriptsTestExecutionListener.class,
MyCustomTestExecutionListener.class})
@ContextConfiguration(locations = { "classpath:test-ApplicationContext.xml" })
public class CabinetMembershipServiceImplTest {
...
}
是否有一种方法可以只添加一个(或多个)TestExecutionListener,而无需从默认配置中显式声明每个侦听器,也不需要#34;覆盖"默认的?
答案 0 :(得分:5)
import org.springframework.test.context.TestExecutionListeners.MergeMode;
@TestExecutionListeners(value = { MyCustomTestExecutionListener.class }, mergeMode = MergeMode.MERGE_WITH_DEFAULTS)
答案 1 :(得分:3)
有没有办法只添加一个(或多个)TestExecutionListener, 不必从默认情况下显式声明每个侦听器 配置还是“覆盖”默认值?
是的,这可以从Spring Framework 4.1开始,并且在@TestExecutionListeners
的Javadoc和参考手册的Merging TestExecutionListeners部分都有明确的文档记录。以下示例直接取自参考手册。
@ContextConfiguration
@TestExecutionListeners(
listeners = MyCustomTestExecutionListener.class,
mergeMode = MERGE_WITH_DEFAULTS
)
public class MyTest {
// class body...
}
此致
Sam( Spring TestContext Framework的作者)