//run before test
@Commit
@Transactional
@BeforeTransaction
@Sql({"/start.sql"})//DONT WORK...
public void beforeTransaction()
{
System.out.println("BEFORE START TRANSACTION");
}
@Test
@Commit
@Transactional
@Sql({"/delete.sql"})
public void sqlTest() {
System.out.println("TEST RUN");
}
start.sql
SET search_path users;
-- here create default values
DELETE FROM users;
INSERT INTO users (id,name) (1,'Joe');
INSERT INTO users (id,name) (2,'Jack');
INSERT INTO users (id,name) (3,'Ellie');
delete.sql
SET search_path users;
--HERE DELETE ONE ROW
DELETE FROM users WHERE name = 'Joe';
运行测试后,我的数据库必须处于这种情况。
SET search_path = users;
SELECT * FORM users;
--------------
| 2 | Jack |
------ -------
| 3 | Ellie |
------ -------
但是那是空的(start.sql)不起作用
答案 0 :(得分:1)
@Commit
,@Transactional
和@Sql
仅在@BeforeTransaction
和@AfterTransaction
方法(或任何其他测试生命周期方法,例如{{1 }},@Before
等。
@After
,@Commit
和@Transactional
仅在类级别和@Sql
方法级别受支持。
如果要为给定的测试方法执行两个SQL脚本,则必须在同一测试方法上一起声明它们:
@Test
...或:
@Sql({"/start.sql", "/delete.sql"})
如果您希望对同一测试类中的每个测试方法执行相同的脚本,则可以像上面的示例一样对测试类进行注释
但是请注意,测试方法上@Sql("/start.sql")
@Sql("/delete.sql")
的出现会覆盖类级别的所有@Sql
声明。
如果您对具有类级和方法级@Sql
声明的可能性感兴趣,请参见this Spring issue。