2015-09-28 3 views
-1

Есть ли какие-либо аннотации, доступные в JUnit (или других), которые могут запускать инструкцию только в начале тестов и в конце? Например: запустите сеанс SQL в начале тестирования и закройте его в конце. @Before и @After - не вариант ((( Выписка из испытаний:java Инструкция JUnit при запуске тестов и окончании тестов

public class HibernateTest { 
    @Autowired 
    SessionFactory sessionfactory; 

    @Autowired 
    DataSource dataSource; 

    Session session; 
    Transaction tx; 

// @Transactional(propagation=Propagation.REQUIRES_NEW) 
    @Before 
    public void setUp() throws MalformedURLException, SQLException, DatabaseUnitException { 
     session = sessionfactory.openSession(); 
     tx = session.beginTransaction(); 
     String sql_categories = "ALTER SEQUENCE categories_category_id_seq1 RESTART WITH 1"; 
     String sql_projects = "ALTER SEQUENCE projects_project_id_seq1 RESTART WITH 1"; 
     String sql_donations = "ALTER SEQUENCE donations_donation_id_seq RESTART WITH 1"; 
     String sql_clear_donations= "delete from donations *"; 
     String sql_clear_projects = "delete from projects *"; 
     String sql_clear_categories= "delete from categories *"; 
     session.createSQLQuery(sql_categories).executeUpdate(); 
     session.createSQLQuery(sql_projects).executeUpdate(); 
     session.createSQLQuery(sql_donations).executeUpdate(); 
     session.createSQLQuery(sql_clear_donations).executeUpdate(); 
     session.createSQLQuery(sql_clear_projects).executeUpdate(); 
     session.createSQLQuery(sql_clear_categories).executeUpdate(); 

    } 

    @After 
    public void setDown() throws MalformedURLException, SQLException, DatabaseUnitException { 
     session.close(); 
     tx.commit(); 
    } 

// @Transactional(propagation=Propagation.REQUIRED) 
    @Test 
    @ExpectedDatabase(
      value = "classpath:ExpectedAddedCategories.xml", 
      assertionMode = DatabaseAssertionMode.NON_STRICT//Не проверять все поля. Только те что надо в xml файле, а не все в базе 
      ) 
    public void testAddCategories() { 
     Category cat = new Category("sport"); 
     Category cat2 = new Category("art"); 
     Category cat3 = new Category("video"); 

     session.persist(cat); 
     session.persist(cat2); 
     session.persist(cat3); 
    } 
} 

Этот код на самом деле не работает Eclipse, просто замирает и даже не одного конца испытаний (я показал только один тест).

+0

можете ли вы уточнить, почему вы не можете использовать '@Before 'и' @ After'? Это классический способ JUnit для запуска кода до/после теста ca как таковые. – Mureinik

+0

У меня есть тесты для работы с базой данных. Каждый тест выполняет некоторые действия. Я хочу начать сеанс (один сеанс) в начале тестов и закрыть его в конце. Но не открывать/закрывать после каждого теста, так как это вызовет задержки. Кстати, я пытался открыть/закрыть сеансы с затмением. Мои тесты просто зависают ((( – ovod

ответ

0

Если вы хотите, чтобы запустить его один раз в классе, вы можете использовать @BeforeClass и @AfterClass. Если вы хотите что-то более продвинутые вы можете захотеть взглянуть на @ClassRule также.

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