Java @Sql不工作@BeforeTransaction Spring测试批注
(beforeTransaction方法)必须在start.SQL中运行SQL命令,然后才能执行不回滚数据库的操作 start.sqlJava @Sql不工作@BeforeTransaction Spring测试批注,java,sql,spring,junit,spring-test,Java,Sql,Spring,Junit,Spring Test,(beforeTransaction方法)必须在start.SQL中运行SQL命令,然后才能执行不回滚数据库的操作 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,
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)不起作用
,@Transactional
,@sql
在@BeforeTransaction
和@postertransaction
方法(或任何其他测试生命周期方法,如@Before
,@After
等)上都不受支持
@Commit
、@Transactional
和@Sql
仅在类级别和@Test
方法级别受支持
如果要为给定的测试方法执行两个SQL脚本,则必须在同一测试方法上同时声明它们:
@Sql({"/start.sql", "/delete.sql"})
。。。或:
@Sql("/start.sql")
@Sql("/delete.sql")
如果您希望为同一测试类中的每个测试方法执行相同的脚本,那么您应该像上面的示例中那样注释您的测试类
但是,请注意,测试方法上出现的@Sql
会覆盖类级别的任何@Sql
声明
如果您对类级和方法级
@Sql
声明的可能性感兴趣,请参阅。好吧,您正在编写您需要实现的内容,但是现在发生了什么?某种异常,意外的行为?您是如何理解什么是@Sql
不起作用的?如果start.Sql起作用并在测试后在数据库中插入3行,我们有2列,但为空。好的,我查看了文档并发现:具体地说,@Sql注释可以在测试类或测试方法上声明。我认为这意味着@Sql
只能与@Test
注释方法一起使用。如果您确实需要以这种方式填充db,我认为您可以手动进行,请尝试使用ResourceDatabasePopulator
。
@Sql("/start.sql")
@Sql("/delete.sql")