Мы используем Spring Framework (XML Version) 4.0.5.RELAESE в нашем проекте Java. В нашем приложении context.xml создается в начале запуска приложения и предоставляет все свойства через dependecy injection.
Теперь мне интересно, какая лучшая (и обычно используемая) стратегия для того, чтобы создать экземпляр в тестовой среде. (У нас есть тесты Unit, Integration и System, которые, по крайней мере, нуждаются в компоненте databaseBaseConnector, предоставляемом в контексте.xml,)
Я думал о создании абстрактного класса, из которого каждый тест простирается, но в этом случае он будет вновь создан для каждого теста. Я хотел бы иметь решение, аналогичное главному приложению, где контекст создается только один раз, а все остальное необходимо установить через инъекцию зависимости.
Исследование этой темы еще не помогло, поэтому я решил задать вопрос.
Spring поставляется с SpringJUnit4ClassRunner
и @ContextConfiguration
-annotation. Если вы используете их, то весна будет использовать один и тот же контекст Spring в разных тестах.
Таким образом, тестовый класс Spring может выглядеть так:
package com.queomedia;
import javax.annotation.Resource;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringJUnit4ClassRunner.class)
//@Transactional
@ContextConfiguration(SpringTestContext.APPLICATION)
public class SpringContextTest {
@Autowire
private ApplicationContext applicationContext;
//Test that the spring context can been loaded
@Test
public void testSpringContextLoad() {
Assert.assertNotNull("application context expected", this.applicationContext);
}
}