2014-01-20 3 views
0

Я читал много советов по этой теме, но, похоже, никто из них не работает. В настоящее время контекст приложения создается для каждого тестового класса, но я хочу, чтобы он был создан только один раз и использовался всеми тестовыми классами.Один весенний контекст в тестах jUnit

Это мой тест установка свита:

@RunWith(ClasspathSuite.class) 
@ClassnameFilters({"org.*", ".*Test"}) 
public class AllTests { 
} 

Это мой абстрактный класс с установкой контекста. Все классы тестов расширяют этот класс.

@TestExecutionListeners({DependencyInjectionTestExecutionListener.class}) 
@ContextConfiguration(classes = {ServiceInitializer.Config.class}) 
@DirtiesContext 
public abstract class ServiceInitializer extends AbstractJUnit4SpringContextTests { 

@Configuration 
@Import({TestConfig.class, SpringClientConfig.class}) 
public static class Config { 
    @Bean 
    public ContactsClient contactsClient(ContactsService contactsService) { 
     return new ContactsClientFactory().createInstance(contactsService);   
    } 
} 

@Autowired 
protected ContactsClient contactsService; 

... 

@Autowired 
protected ApplicationContext appContext; 


@BeforeClass 
public static void setUpBeforeClass() throws Exception { 
    initializeDB(); 
    initializeApplicationServiceProperties(); 
    dbInit = false; 
} 

protected static void initializeDB() throws Exception { 
    ... database settings ... 

    dropSQLTestDatabase(dbName, jdbcProperties); 
    dropTestDatabase(); 
} 

protected static void initializeApplicationServiceProperties() throws IOException { 

    System.setProperty("log4j.config.file", ServiceInitializer.class.getClassLoader().getResource("log4j-test.xml").getFile()); 
    System.setProperty("app.config.file", ServiceInitializer.class.getClassLoader().getResource("test.properties").getFile()); 

    AppStartSupport.configureLogging(); 
    AppStartSupport.loadProperties(); 

} 

... 
} 

Кто-нибудь знает, как изменить эту настройку, чтобы достичь единственного контекста, который будет использоваться всеми тестами jUnit?

Спасибо :-)

ответ

0

Одним из способов достижения этой цели является установкой forkCount свойства Maven плагина для верного 1 (если вы работаете тесты JUnit через Maven surfire плагин), или не указывать его в все в объявлении плагина в вашем POM-файле, поскольку значение по умолчанию равно 1. Это приведет к тому, что контекст приложения будет загружен только один раз. В этом случае вам нужно убедиться, что вы очищаете контекст после тестов, которые его модифицируют.

.. 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.16</version> 
       <dependencies> 
       </dependencies> 
       <configuration> 
        <includes> 
         <include>**/*Test.java</include> 
        </includes> 
        <forkCount>1</forkCount> 
       </configuration> 
      </plugin> 
.. 
Смежные вопросы