Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring boot test: @Sql annotation Unable to locate sql files placed in src/test/resources

I didn't want to load the entire Spring Boot configuration for unit-testing my DAO layer, and therefore created a nested configuration class to suppress default configurations. But when I try to specify SQL scripts for it to run before tests, its unable to find them.

Here's the code:

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

    @Configuration
    static class TestConfiguration{

    }

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

}

I get the error: 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

I've tried placing the file at both src/main/resources (not preferred) as well as at src/test/resources (which I prefer)

Note: I'm running the Unit test from inside Eclipse by doing Run as -> JUnit test.

Edit: Added the static keyword to the configuration class

like image 640
Daud Avatar asked Nov 29 '22 21:11

Daud


1 Answers

your inner configuration class will not work unless you add a static keyword before its definition. However you should know that for the @Sql annotation

Path Resource Semantics

Each path will be interpreted as a Spring Resource. A plain path — for example, "schema.sql" — will be treated as a classpath resource that is relative to the package in which the test class is defined. A path starting with a slash will be treated as an absolute classpath resource, for example: "/org/example/schema.sql". A path which references a URL (e.g., a path prefixed with classpath:, file:, http:, etc.) will be loaded using the specified resource protocol.

So try to prefix the value inside @Sql with classpath: like this :

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

Good luck!

like image 174
Abdelghani Roussi Avatar answered Jan 14 '23 08:01

Abdelghani Roussi