интеграционное тестирование весеннего сервисного уровня на основе перенесенных данных - PullRequest
1 голос
/ 02 февраля 2012
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext-test.xml"})
@Transactional
public class MyServiceTest {

    @Resource(name="myService")
    public MyService myService;

    @Test
    public void testSeomthing() {
    //do some asserts using myService.whatever()
    }
}

Однако тесты основаны на данных, которые я переносил, поэтому каждый раз, когда я запускаю свой набор тестов, я хочу выполнить свой несвязанный код миграции.Я не хочу запускать @Before в каждом тестовом классе.Я хочу запустить его один раз в начале всего процесса тестирования, где я могу это поставить?

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Я бы посоветовал вам создать тестовый компонент где-нибудь с логикой запуска, вызванной в @PostConstruct:

@Service
public class TestBean {

    @PostConstruct
    public void init() {
        //startup logic here
    }

}

Очевидно, что этот бин должен создаваться только для тестов, самый простой способ добиться этого - поместить его в src/test/java в пакет, который component-scan определен Spring для @Service аннотированных классов.

Примечание: Вы должны помнить, что @PostConstruct не выполняется в транзакции! См. Как вызвать метод на весеннем прокси после инициализации .

1 голос
/ 02 февраля 2012

JUnit также предлагает аннотацию @BeforeClass, которую вы можете поместить в статический метод для инициализации ресурсов только один раз.

...