2015-10-06 44 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

相反,更好的選擇是創建一個自定義的_composed註釋_,如@jny的答案中所述。 –

+0

神奇山姆。它在書中:)​​在我可以閱讀的任何地方有沒有JUnit 5路線圖? –

回答

2

如果你使用Spring框架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