我有一个带有H2数据库的spring boot应用程序。该应用程序会在启动时引导数据库,为此,我在src / main / resources和src / test / resources中都有一个schema.sql / data.sql文件。运行单元测试时,将读取每个位置并加载所有文件,从而导致两次创建数据库。测试类路径比它应该的要广。如果我运行主应用程序,则不会观察到该问题。如何强制junit测试仅考虑test文件夹中的资源?请注意,无论是在Eclipse中运行还是在Maven中运行,问题都是相同的。
这是我在运行测试时在日志中看到的内容
2019-12-17 15:34:25.549 : Executing SQL script from URL [file:<REDACTED>/target/classes/schema.sql]
...
2019-12-17 15:34:25.601 : Executed SQL script from URL [file:<REDACTED>/target/classes/schema.sql] in 52 ms.
2019-12-17 15:34:25.601 : Executing SQL script from URL [file:<REDACTED>/target/test-classes/schema.sql]
...
2019-12-17 15:34:25.618 : Executed SQL script from URL [file:<REDACTED>/target/test-classes/schema.sql] in 17 ms.
我的测试是这样开始的(删除@ComponentScan不能解决问题):
@RunWith(SpringRunner.class)
@JdbcTest
@ComponentScan
public class SiteDaoTest {
...
}
application.properties是香草
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
# Datasource
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
# spring.profiles.active=test
logging.level.org.springframework.jdbc.core.JdbcTemplate=debug
logging.level.root=DEBUG
我已经尝试过配置文件,可以解决此问题,但这对我来说似乎是错误的解决方案。