【问题标题】:Unable to run sql file in Spring Boot test无法在 Spring Boot 测试中运行 sql 文件
【发布时间】:2021-07-27 06:41:36
【问题描述】:

我正在尝试为我的 Spring Boot 应用程序编写一个独立的集成测试。

Test类是这样的:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Sql("/create_schema.sql")
public class UserControllerTest {
    @LocalServerPort
    private int port;

    private String baseUrl = "http://localhost";


    private static RestTemplate restTemplate = null;

    @BeforeAll
    public static void init() {
        restTemplate = new RestTemplate();
    }

    @BeforeEach
    public void setUp() {
        baseUrl = baseUrl.concat(":").concat(port+ "").concat("/users");
    }


    @Test
    @Sql("/create.sql")
    public void test1() {
        User user = restTemplate.getForObject(baseUrl.concat("/users/{username}"), User.class, "username1");

        Assertions.assertNotNull(user);
        Assertions.assertEquals(100L, user.getId());
    }
}

create_schema.sql 文件是这样的:

CREATE TABLE USERINFO
(
    USER_ID NUMBER(19,0) NOT NULL,
    PWD VARCHAR2(255 CHAR),
    USERNAME VARCHAR2(255 CHAR),
    PRIMARY KEY (USER_ID)
);

create.sql 文件只插入一行数据:

INSERT INTO USERINFO (USER_ID, USERNAME, PWD) VALUES(100, 'username1','$2y$12$iUHx4NGJpgJKskDhhN12y.e/D9tzHe/B7DbDOf37Pfx0xDymIazpi');

当我运行测试时。我得到的错误是

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERINFO" not found; SQL statement:
INSERT INTO USERINFO (USER_ID, USERNAME, PWD) VALUES(100, 'username1','$2y$12$iUHx4NGJpgJKskDhhN12y.e/D9tzHe/B7DbDOf37Pfx0xDymIazpi') [42102-200]

这很奇怪,因为 create_schema.sql 运行良好,应该在 H2 中创建一个表 USERINFO。

在我的 IDE (IntelliJ) 中,

USERINFO (USER_ID, USERNAME, PWD) 

在 INSERT 语句中显示为红色,IDE 显示“无法解析表 USERINFO”。

我做错了什么?

【问题讨论】:

  • 你能用堆栈跟踪显示完整的异常吗?

标签: java spring-boot spring-data-jpa h2


【解决方案1】:

在类级别使用 @SqlMergeMode(MergeMode.MERGE) 来合并 sql 查询并同时运行它们。 似乎您的类级别 SQL 注释被方法级别 SQL 注释覆盖。 因此永远不会执行创建模式 sql。

更多阅读请参考:https://www.concretepage.com/spring-5/sql-example-spring-test

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 2016-05-12
    • 2019-04-13
    • 2021-10-18
    • 2019-05-02
    • 2020-03-26
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多