2012-02-02 3 views
1
@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 в каждом тестовом классе. Я хочу запустить его один раз в начале полного тестового процесса, где я могу это поставить?интеграционный тест весенний сервисный уровень на основе перенесенных данных

ответ

1

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

@Service 
public class TestBean { 

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

} 

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

Примечание: Вы должны помнить, что @PostConstruct не работает в транзакции! См. How to call method on spring proxy once initialised.

1

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

+0

спасибо, но я не совсем понимаю. У меня будет отдельный класс, который будет иметь статический метод, который я бы аннотировал? Или статический метод в каждом тестовом классе? – NimChimpsky

+0

Один статический метод в каждом тестовом классе. Не совсем уверен, наследуется ли @BeforeClass. (возможно, захотите проверить документы на этом) –

+0

, чтобы он запускался для каждого тестового класса? Я хотел, чтобы он запускался один раз для всех тестов ...? – NimChimpsky

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