2015-10-06 2 views
0

У меня есть несколько десятков тестов, которые используют все настройки и слушатели для всех тестов. Это означает, что следующие строки повторяются:Как я могу использовать настройки по умолчанию и тестовые прослушиватели по умолчанию для всех тестов Spring?

@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 { 

Но это меняет имена теста.

+0

Пожалуйста, ** не ** расширяйте 'SpringJUnit4ClassRunner'. Бегуны JUnit уходят в прошлое и, вероятно, не поддерживаются в JUnit 5 и Spring Framework 5. –

+0

Вместо этого лучшим вариантом является создание пользовательской _композированной аннотации_, как указано в ответе от @jny. –

+0

Фантастический Сэм. Это происходит в книге :) Есть ли дорожная карта JUnit 5 в любом месте, о котором я могу прочитать? –

ответ

2

Если вы используете 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 { /* ... */ } 
+0

JUnit '@ RunWith' не может использоваться в качестве мета-аннотации. Как я уже упоминал в Stack Overflow, это не имеет ничего общего с Spring. JUnit просто не поддерживает мета-аннотации вообще. Поэтому я редактирую ваш ответ. –

+0

Я также добавил отсутствующие объявления '@ Retention' и' @ Target'. –

+0

Спасибо, @Sam Brannen, для вас разъяснения – jny

Смежные вопросы