如何为所有 Spring 测试使用默认配置和默认测试侦听器?
How can I use default configuration and default test listeners for all my Spring tests?
我有几十个测试,所有测试都使用相同的配置和侦听器。这意味着重复以下几行:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebDriverConfig.class)
@TestExecutionListeners(listeners = {ScreenshotTaker.class, DependencyInjectionTestExecutionListener.class})
我创建了以下内容:
public class WebDriverRunner extends SpringJUnit4ClassRunner {
public WebDriverRunner(Class<?> clazz) throws InitializationError {
super(clazz);
}
@Override
protected TestContextManager createTestContextManager(Class<?> clazz) {
return super.createTestContextManager(ConfigShim.class);
}
@ContextConfiguration(classes = WebDriverConfig.class)
@TestExecutionListeners(listeners = {ScreenshotTaker.class, DependencyInjectionTestExecutionListener.class})
public static class ConfigShim {
}
}
这意味着我可以 运行 测试如下:
@RunWith(WebDriverRunner.class)
public class ShoppingCartPageIT {
但是,这会更改测试的名称。
如果您使用 Spring Framework 4.1 或更高版本,您可以创建自己的 composed annotation 用于测试配置:
定义注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@ContextConfiguration(classes = WebDriverConfig.class)
@TestExecutionListeners({
ScreenshotTaker.class,
DependencyInjectionTestExecutionListener.class
})
public @interface WebDriverTestConfig {}
然后注释您的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@WebDriverTestConfig
public class ShoppingCartPageIT { /* ... */ }
我有几十个测试,所有测试都使用相同的配置和侦听器。这意味着重复以下几行:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebDriverConfig.class)
@TestExecutionListeners(listeners = {ScreenshotTaker.class, DependencyInjectionTestExecutionListener.class})
我创建了以下内容:
public class WebDriverRunner extends SpringJUnit4ClassRunner {
public WebDriverRunner(Class<?> clazz) throws InitializationError {
super(clazz);
}
@Override
protected TestContextManager createTestContextManager(Class<?> clazz) {
return super.createTestContextManager(ConfigShim.class);
}
@ContextConfiguration(classes = WebDriverConfig.class)
@TestExecutionListeners(listeners = {ScreenshotTaker.class, DependencyInjectionTestExecutionListener.class})
public static class ConfigShim {
}
}
这意味着我可以 运行 测试如下:
@RunWith(WebDriverRunner.class)
public class ShoppingCartPageIT {
但是,这会更改测试的名称。
如果您使用 Spring Framework 4.1 或更高版本,您可以创建自己的 composed annotation 用于测试配置:
定义注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@ContextConfiguration(classes = WebDriverConfig.class)
@TestExecutionListeners({
ScreenshotTaker.class,
DependencyInjectionTestExecutionListener.class
})
public @interface WebDriverTestConfig {}
然后注释您的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@WebDriverTestConfig
public class ShoppingCartPageIT { /* ... */ }