Java TestNG不回滚的测试数据库

Java TestNG不回滚的测试数据库,java,mysql,spring,testng,spring-test,Java,Mysql,Spring,Testng,Spring Test,我正在尝试使用DB和TestNG进行一些基本的自动化测试,但它不起作用。正如我所料,第一次运行成功,第二次运行失败,因为第一次从未回滚。我看了几个地方的例子,似乎是正确的。有人知道我错过了什么吗 <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.11

我正在尝试使用DB和TestNG进行一些基本的自动化测试,但它不起作用。正如我所料,第一次运行成功,第二次运行失败,因为第一次从未回滚。我看了几个地方的例子,似乎是正确的。有人知道我错过了什么吗

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.11</version>
        <scope>test</scope>
    </dependency>
错误:

创建模式FOO

org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of class path resource [automated/RollbackTest.sql]: CREATE SCHEMA FOO; nested exception is java.sql.SQLException: Can't create database 'FOO'; database exists

返回连接的
@Bean
方法看起来非常可疑。所以我建议你删除这个


为了在测试方法之前或之后执行SQL脚本,您最好查看Spring的
@SQL
注释

此外,您还可以安全地删除测试方法上的
@Rollback
@Transactional
声明

  • @Rollback
    是默认行为
  • @Transactional
    已在AbstractTransactionalTestNGSpringContextTests上声明
问候,


Sam(springtestcontext框架的作者)

返回
连接的
@Bean
方法看起来非常可疑。您这样做的目的是什么?为了在测试方法之前或之后执行SQL脚本,理想情况下,您应该查看Spring的
@SQL
注释。@SamBrannen我返回该连接,因为上一次代码迭代正在使用它-我将删除它,看看会发生什么。我还要看一下
@Sql
syntax@SamBrannen我按照你的建议做了:
@Sql
注释正是我在代码中试图做的事情,因此这一点值得一提!我还删除了连接,现在似乎可以工作了。你为什么不把你的建议变成一个答案,这样我就可以给你信任,因为它对你有用。
CREATE SCHEMA FOO;

CREATE TABLE FOO.BAZ (
  ID int PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(256) NOT NULL
);

INSERT INTO FOO.BAZ (name) values('christian');
org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of class path resource [automated/RollbackTest.sql]: CREATE SCHEMA FOO; nested exception is java.sql.SQLException: Can't create database 'FOO'; database exists