2012-01-25 1 views
2

У меня есть модульные тесты с пружиной. Все тесты загружают файл конфигурации пружины, а затем добавляют еще несколько.JUnit: Могу ли я сохранить общие части весеннего контекста?

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:beans.xml" }, inheritLocations = true) 
public abstract class TestBase { 
} 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:extraBeansOne.xml" }, inheritLocations = true) 
public class TestOne extends TestBase { 

    @Test 
    public void testA() { 
    } 
} 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:extraBeansTwo.xml" }, inheritLocations = true) 
public class TestTwo extends TestBase { 

    @Test 
    public void testB() { 
    } 
} 

Там также люкс с двумя испытаниями:

@RunWith(Suite.class) 
@Suite.SuiteClasses({ TestOne.class, TestTwo.class }) 
public class TestSuite { 
} 

В общем файле конфигурации весной, у меня есть фасоль:

<beans ...> 
    <bean id="testBean" class="com.example.TestBean" /> 
<bean> 

Проблема заключается в том, что, когда я бегу набор, testBean загружается дважды, один раз для каждого тестового класса. Поскольку он определен в общем файле конфигурации, есть ли способ предотвратить его многократную загрузку?

+0

Где вы на самом деле с помощью 'testBean' в тестах? – isah

+0

Что значит «загружается дважды»? Весенние бобы по умолчанию являются одиночными, поэтому, если у вас есть два экземпляра вашего testBean, это означает, что у вас есть несколько контекстов Spring. – Olaf

+0

@isah, неважно, пользуюсь ли я этим компонентом или нет, он загружается вместе с контекстом. – Cos64

ответ

1

Нет никакой возможности повторного использования.

Spring Junit Runner повторно использует весенний контекст по различным тестам, но только если файлы одинаковые.

9.3.2.1 Context management and caching ...

классы испытаний обеспечивают массив, содержащий местоположения ресурсов метаданных конфигурации XML - как правило, в пути к классам - который используется для настройки приложения. Эти местоположения такие же, как или аналогичные списку местоположений конфигурации, указанным в файле web.xml или других конфигурационных файлах развертывания.

Если это очень важно для вас, и вы готовы потратить на это время, вы можете попытаться реализовать что-то, что основано на том, что контекст приложения может иметь родителя (например, два контекста в веб-приложениях , определенный для ContextLoaderListener другой, определенный для DispatcherServlet)). Затем можно использовать/повторно использовать родительский контекст в разных тестовых зависимых детях.

@see Spring Reference: Chapter 9.3.5.2 Context management and caching

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