2016-12-23 3 views
1

Я использую spring-test-dbunit для запуска интеграционных тестов. Я хочу использовать разные наборы данных внутри одного класса.объект уже закрыт в тесте интеграции

У меня есть BaseRepositoryTest класс

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(value = { 
     "classpath:path/to/context/context.xml"}) 
@DirtiesContext(classMode = ClassMode.AFTER_CLASS) 
@TransactionConfiguration() 
public abstract class BaseRepositoryTest extends AbstractTransactionalJUnit4SpringContextTests { 
    /** Database connection. */ 
    @Autowired 
    protected IDatabaseConnection databaseConnection; 


    /** 
    * Configures database connection. 
    */ 
    @PostConstruct 
    public void initConfig() { 
     try { 
      databaseConnection.getConnection().setAutoCommit(true); 
     } catch (SQLException e) { 
      // throws exception 
     } 
    } 

    /** 
    * Load dataset data. 
    * 
    * @param datasetPath path to dataset 
    */ 
    protected void loadData(String datasetPath) { 
     try { 
      IDataSet dataset = new FlatXmlDataSetBuilder() 
        .setColumnSensing(true) 
        .build(new ClassPathResource(datasetPath).getFile()); 
      DatabaseOperation.CLEAN_INSERT.execute(databaseConnection, dataset); 
     } catch (Exception e) { 
      // throws exception 
     } 
    } 

И BaseAnnotatedRepositoryTest класс

@DbUnitConfiguration(databaseConnection = { "databaseConnection" }) 
@TestExecutionListeners(DbUnitTestExecutionListener.class) 
public abstract class BaseAnnotatedRepositoryTest extends BaseRepositoryTest { 

А вот тест

public class PrototypeTest extends BaseAnnotatedRepositoryTest { 

    private static final String TEST_DATASET = 
      "testDataset.xml"; 

    @Autowired 
    private IQuestionRepository repository; 

    @Test 
    @DatabaseSetup(TEST_DATASET) 
    public void testSimple() { 
    } 

    @Test 
    @DatabaseSetup(TEST_DATASET) 
    public void anotherTestSimple() { 
    } 

} 

При попытке запустить тест, который я получаю сообщение об ошибке с этим причина

org.h2.jdbc.JdbcSQLException: The object is already closed [90007-170] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) 
    at org.h2.message.DbException.get(DbException.java:169) 
    at org.h2.message.DbException.get(DbException.java:146) 
    at org.h2.message.DbException.get(DbException.java:135) 
    at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1388) 
    at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1366) 
    at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:406) 

Если я отделяю эти методы тестирования, например, перемещаю каждый метод в свой класс - он отлично работает.

ответ

0

Когда я сменил AFTER_CLASS на AFTER_EACH_TEST_METHOD, он начал нормально работать. (хотя время значительно увеличилось)

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