Весна: в таблице уже существует ошибка! @DirtiesContext и EmbeddedDatabaseBuilder не работают вместе? - PullRequest
0 голосов
/ 29 октября 2018

Я получил некоторые ошибки при запуске тестового класса junit.

Вот мой тестовый класс.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=TestApplicationContext.class)
@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD)
public class UserDaoTestDrive {

    @Autowired
    private UserDao dao;

Это мой класс Java, который я использовал для конфигурации.

@Configuration
@EnableTransactionManagement
public class TestApplicationContext {
...
    @Bean
    public DataSource embeddedDatabase() {

        return new EmbeddedDatabaseBuilder().setName("embeddedDatabase").setType(HSQL).addScript("classpath:springbook/user/sqlservice/updatable/sqlRegistrySchema.sql").build();
    }

Это сообщение об ошибке.

Error creating bean with name 'embeddedDatabase' defined in class springbook.TestApplicationContext: 
Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: 
Factory method [public javax.sql.DataSource springbook.TestApplicationContext.embeddedDatabase()] threw exception; 
nested exception is org.springframework.dao.DataAccessResourceFailureException: Failed to execute database script;
...Caused by: java.sql.SQLException: Table already exists

И у меня есть этот странный результат теста , который не подходит для любого другого метода теста. У меня есть 7 методов испытаний, и 1,3,5,7 всегда успешно, а 2,4,6 - неудачно.

Я понятия не имею, почему я получаю эти ошибки, потому что мой тестовый класс работал хорошо, когда я использовал файл XML для конфигурации контекста

Мой XML-файл был таким.

<jdbc:embedded-database id="embeddedDatabase" type="HSQL">
  <jdbc:script location="classpath:springbook/user/sqlservice/updatable.sqlRegistrySchema.sql" />
<jdbc:embedded-database>

sqlRegistrySchema file

CREATE TABLE  SQLMAP(
KEY_ VARCHAR(100) PRIMARY KEY,
SQL_ VARCHAR(100) NOT NULL);

Может кто-нибудь сказать мне, почему?

Полагаю, встроенная база данных не закрывается, как только завершается каждый метод тестирования.

1 Ответ

0 голосов
/ 30 октября 2018

Я предлагаю попробовать CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ в вашем sql-скрипте. Похоже, БД висит где-то в памяти.

...