问题描述
我的问题是,为什么在测试环境中忽略物理策略? 我尝试了所有标准实现,并实现了自己的命名策略。如示例所示,我将休眠4的旧定义用于命名策略,将休眠5以来的新定义用于命名策略。 仅真实数据库的命名受到影响。如果更改命名策略,则总是以蛇形定义测试数据库实体的命名。例如:user_membership 当我们通过服务器上的sql脚本以及JUnit集成测试创建测试数据时,这种行为很烦人。此外,我们还有一些本机sql文件,可用于长时间运行的导出,以提高性能,如果两种命名策略都不匹配,则我们将无法正确测试这些文件。
我最终决定对所有新的后端服务器(在测试数据库和真实数据库中使用相同的命名)使用自定义蛇案策略,但是对于所有旧的后端服务器,由于现有的策略,我无法更改现有策略生产中的数据库。
我使用:
- Spring Boot:2.2.5.RELEASE
- spring-boot-starter-web
- spring-boot-starter-test
- spring-boot-starter-data-jpa
- 休眠:5.3.15。最终
application.yml用于服务器执行:
spring:
resources:
add-mappings: true
veLocity:
enabled: false
profiles:
active: @spring.profiles.active@
datasource:
url: jdbc:MysqL://${spring.datasource.endpoint}:${spring.datasource.port}/${spring.datasource.name}?useUnicode=true&characterEncoding=utf8&useSSL=false
username: ${/web-backend-[stage]/app/database/user}
password: ${/web-backend-[stage]/app/database/password}
endpoint: ${/web-backend-[stage]/app/database/endpoint}
port: ${/web-backend-[stage]/app/database/port}
name: ${/web-backend-[stage]/app/database/name}
jpa:
database-platform: org.hibernate.dialect.MysqL5InnoDBDialect
database: MysqL
openInView: false
show_sql: false
generate-ddl: false
hibernate:
ddl-auto: validate
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
用于服务器执行的application-test.yml:
spring:
veLocity:
enabled: false
profiles:
active: test
datasource:
dataSourceClassName: org.h2.jdbcx.JdbcDataSource
url: jdbc:h2:mem:test;MODE=MysqL;DB_CLOSE_DELAY=-1
databaseName:
serverName:
username:
password:
jpa:
database-platform: org.hibernate.dialect.MysqL5InnoDBDialect
database: MysqL
openInView: false
show_sql: false
generate-ddl: true
hibernate:
ddl-auto: create
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
BaseIntegrationTest.class
import org.springframework.boot.test.context.SpringBoottest;
import org.springframework.boot.test.context.SpringBoottest.WebEnvironment;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.jdbc.sql;
@SuppressWarnings("ClassMayBeInterface") // must be class to inherit annotations
@ActiveProfiles(SpringProfile.TEST)
@sql({"/db/clean.sql","/db/data.sql"})
@SpringBoottest(webEnvironment = WebEnvironment.DEFINED_PORT,classes = {Application.class,TestDataProvider.class})
public abstract class BaseIntegrationTest {
}
在每个测试中:
@Autowired
private WebApplicationContext wac;
@postconstruct
void setup() {
MockitoAnnotations.initMocks(this);
restProjectmockmvc = mockmvcBuilders.webAppContextSetup(wac)
.apply(springSecurity())
.build();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)