Spring Boot 测试:@Sql annotation无法找到放在src/test/resources中的sql文件

rur96b6h  于 2023-03-22  发布在  Spring
关注(0)|答案(2)|浏览(131)

我不想加载整个Sping Boot 配置来对我的DAO层进行单元测试,因此创建了一个嵌套的配置类来抑制默认配置。但是当我尝试指定SQL脚本让它在测试之前运行时,它无法找到它们。
下面是代码:

package com.test.customer.controller;
..
@RunWith(SpringRunner.class)
@JdbcTest
@Sql({"data.sql"})
public class InterviewInformationControllerTest {

    @Configuration
    static class TestConfiguration{

    }

    @Test
    public void testCustomer() {
        // code
    }

}

我得到错误:

Cannot read SQL script from class path resource [com/test/customer/controller/data.sql]; 
nested exception is java.io.FileNotFoundException: 
class path resource [com/test/customer/controller/data.sql] 
cannot be opened because it does not exist

我尝试将文件放在src/main/resources(不是首选)和src/test/resources(我更喜欢)
注意:我在Eclipse内部通过执行Run as -> JUnit test来运行单元测试。

编辑:在配置类中增加static关键字

wpx232ag

wpx232ag1#

除非在定义前添加static关键字,否则您的内部配置类将无法工作。但是,您应该知道对于@Sql注解
路径资源语义
每个路径将被解释为Spring Resource。普通路径-例如,“schema.sql”-将被视为相对于其中定义测试类的包的classpath资源。以斜杠开头的路径将被视为绝对classpath资源,例如:引用URL的路径(例如,以classpath:、file:、http:等为前缀的路径)将使用指定的资源协议来加载。
因此,尝试在@Sql中的值前面加上classpath:,如下所示:

@Sql(scripts={"classpath:data.sql"})

祝你好运!

uinbv5nw

uinbv5nw2#

检查你的模块的out目录。在资源中创建目录时,如果你直接用命名空间命名,比如com.gakshintala.bookmybook,它会完全用那个名字作为目录名,所以out也包含了resources下的这个目录,名字是com.gakshintala.bookmybook。PFB对与错。顶部是对的,底部是错的。
第一节第一节第一节第一节第一次
Spring总是查找嵌套的目录资源-〉com-〉gakshintala-〉bookmybook。因此创建该目录结构。

相关问题