Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @Sql不工作@BeforeTransaction Spring测试批注_Java_Sql_Spring_Junit_Spring Test - Fatal编程技术网

Java @Sql不工作@BeforeTransaction Spring测试批注

Java @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,

(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,'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")