如何为所有 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 { /* ... */ }