对于 Spring Framework 6 - 用于学术目的,
@Repository
直接与 DataSource
一起工作。因此,既不涉及JdbcTemplate
也不涉及DataSourceTransactionManager
no。
@Repository
实现了许多 CRUD 方法。它们按预期工作,并且有一个测试类来测试一系列 crud 事件,例如:插入、查找、计数、更新、查找、计数等……它例如:
@SpringJUnitConfig(classes={AppConfig.class})
@DisplayName("Testing All CRUD Test Methods according with a specific order")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class CientificoServiceCrudTests {
@Autowired
private CientificoService cientificoService;
...
全部通过。
但是当
@SQL
涉及如下:
@Sql(scripts={"classpath:com/manuel/jordan/mysql/v1/schema.sql",
"classpath:com/manuel/jordan/mysql/v1/data.sql"})
@SpringJUnitConfig(classes={AppConfig.class})
@DisplayName("Testing All CRUD Test Methods according with a specific order")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class CientificoServiceCrudTests {
...
@Test
@Order(3)
@Sql(scripts={"classpath:/com/manuel/jordan/mysql/v1/insert.sql"})
@DisplayName("Testing 'save' with 'id' 14")
void saveWithId14Test() {
...
已确认
@Sql
脚本 not 执行,因为它们被 ignored.
它们 not 执行,因为测试方法由于断言而失败,并且它们被 ignored 因为作为一个简单的实验,如果为脚本文件建立了无效路径,例如:
@Sql(scripts={"classpath:/xxxcom/manuel/jordan/mysql/v1/insert.sql"})
测试方法失败如前所述由于断言但是从一开始never据报道找不到脚本文件,因为它不存在-正如预期的那样。
问题
如果不是,这是预期的行为吗?或者测试类需要额外的东西吗?
Note该应用程序使用独特的
DataSource
与MySQL
一起使用
您的
@Sql
注释被忽略,因为 SqlScriptsTestExecutionListener
未激活...因为 spring-tx
和 spring-jdbc
不在类路径上。
那些是必需的:如果您查看
SqlScriptsTestExecutionListener
的源代码,您可以在导入中看到监听器使用ResourceDatabasePopulator
的spring-jdbc
和spring-tx
的各种类型。
但是,如果缺少这些依赖项之一,则不会向用户传播异常,因为它不一定是error。
基本原理:Spring TestContext Framework 尝试注册所有default
TestExecutionListener
s。如果无法加载其中一个侦听器——例如,由于类路径中缺少依赖项——Spring 将在 DEBUG
级别记录它。
这是设计使然:支持“可选”听众。实际上,几乎所有的侦听器都是可选的。这适用于
spring-test
提供的侦听器以及 Spring 组合项目(Boot、Security 等)和任何第三方库提供的侦听器。