2014-01-20 12 views
9

Gibt es eine Möglichkeit, eine einzelne Bean oder einen Wert aus einer Spring-Konfiguration für einen oder mehrere Integrationstests zu ersetzen?Java-basierte Spring Context-Konfiguration für Tests überschreiben

In meinem Fall habe ich die Konfiguration

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = {"foo.bar"}) 
public class MyIntegrationTestConfig { 
    // everything done by component scan 
} 

die für meinen Integrationstest verwendet wird

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = MyIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class) 
public class MyIntegrationTest { 
    // do the tests 
} 

Jetzt mag ich einen zweiten Satz von Integrationstests haben, wo ich eine Bohne ersetzen durch ein anderer.

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = MyIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class) 
public class MySpecialIntegrationTest { 
    // influence the context configuration such that a bean different from the primary is loaded 

    // do the tests using the 'overwritten' bean 
} 

Was ist der einfachste Weg, dies zu erreichen?

Antwort

10

Das Spring-Test-Framework kann die Erweiterung über die Konfiguration verstehen. Es bedeutet, dass Sie nur MySpecialIntegrationTest von MyIntegrationTest erweitern müssen:

@ContextConfiguration(classes = MySpecialIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class) 
public class MySpecialIntegrationTest extends MyIntegrationTest { 

    @Configuration 
    public static class MySpecialIntegrationTestConfig { 
    @Bean 
    public MyBean theBean() {} 
    } 

} 

und schaffen die notwendige Java Config-Klasse und es @ContextConfiguration bieten. Spring lädt die Basis und erweitert sie um diejenige, die Sie in Ihrem erweiterten Testfall spezialisiert haben.

Weitere Informationen finden Sie unter official documentation.

Verwandte Themen