gpt4 book ai didi

用于 Spring junit测试的mysql

转载 作者:行者123 更新时间:2023-11-29 00:03:02 24 4
gpt4 key购买 nike

有什么方法可以使用 MySQL 进行 Spring 的 JUnit 测试吗?

我问这个是因为我在 MYSQL 中有很多存储过程并且我注意到 H2 不能与 SP 一起工作。

编辑:

现在我对 src/main 的配置如下:

@ComponentScan
@EnableAutoConfiguration
@EnableJpaRepositories
public class Application {

public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);
}
}


spring.datasource.url=jdbc:mysql://localhost/mydb
spring.datasource.username=user
spring.datasource.password=pw
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Spring 可以很好地处理这种配置。它读取 application.properties,查看 spring.datasource.* 并知道我已经设置了数据源。

这里一切都很好。

现在,在测试中我使用类似的东西:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Application.class})
@Transactional
public class TxServiceTest {

}

这不会针对 MySQL 数据库运行测试。它将使用 H2 数据库运行测试。我需要使用 MySQL 进行测试,因为我使用了很多存储过程。

我尝试过许多其他组合,但没有一个有效。我在这里缺少什么?

可能的修复:

我不知何故找到了一种让它工作的方法。我让主项目保持不变,并在我的测试项目中添加了一个新类:

@Configuration
public class PersistenceContext {

@Bean
public DataSource dataSource() {
org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost/mydb?noAccessToProcedureBodies=true");
dataSource.setUsername("xx");
dataSource.setPassword("yy");
return dataSource;
}

}

我不太喜欢这个解决方案,但它确实有效。

最佳答案

听起来像是集成测试。首先,确保您的数据库始终是最新的,以避免恢复和处理常见错误。您可以使用 liquibase 或 flyway 来管理增量。另外,确保在执行测试后数据库的状态没有被改变。我的意思是,如果一开始你有一个没有数据的表,那么在你执行测试之后这个表一定没有数据。您可以使用 dbunit 或 spring-dbunit,它是 dbunit for spring 的扩展来管理它。

为了使用本地 mysql 数据库,您可以使用此插件 http://mysql.jcabi.com/

编辑 01

替换您的 h2 数据源 bean:

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/demo" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>

关于用于 Spring junit测试的mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com