Я получил некоторые ошибки при запуске тестового класса 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);
Может кто-нибудь сказать мне, почему?
Полагаю, встроенная база данных не закрывается, как только завершается каждый метод тестирования.