我有一些集成测试,为此我使用Testcontainers。但我突然意识到,当我的应用程序数据库docker容器关闭时,所有其他测试(不包括使用Testcontainers的集成测试)都失败了(甚至是Spring Boot Initializer生成的contextLoads()
我得到:
java.lang.IllegalState异常:未能加载应用上下文在org.springframework.test.context.cache.DefaultCacheAware ContextLoaderDelegate.load上下文(DefaultCacheAware ContextLoaderDelegate.java:132)
造成的:org.springframework.beans.factory.BeanCreation异常:错误创建bean名称'liquibase'定义在类路径资源
[org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]:调用init方法失败;嵌套的异常是liquibase。例外数据库例外:com.mysql。希杰。jdbc。例外。通信异常:通信链路故障
很明显,应用程序想要连接到数据库,而数据库容器已关闭。
我一直在调查,但我不记得只需要为应用程序的测试/构建过程启动容器,所以这个问题对我来说是新问题。但如果有什么地方做错了,它可能在这里,在我的
AbstractDatabaseIT
类中:
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ContextConfiguration(initializers = AbstractDatabaseIT.DockerMySqlDataSourceInitializer.class)
@Testcontainers
public abstract class AbstractDatabaseIT {
private static final String MYSQL_IMAGE_NAME = "mysql:5.7.24";
public static final MySQLContainer<?> mySQLContainer = new MySQLContainer<>(MYSQL_IMAGE_NAME);
static {
mySQLContainer.start();
}
public static class DockerMySqlDataSourceInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(@NotNull ConfigurableApplicationContext applicationContext) {
Map<String, String> parameters = new HashMap<>();
parameters.put("command", "--character-set-server=utf8");
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(
applicationContext,
"spring.datasource.url=" + mySQLContainer.getJdbcUrl(),
"spring.datasource.username=" + mySQLContainer.getUsername(),
"spring.datasource.password=" + mySQLContainer.getPassword()
);
mySQLContainer.setParameters(parameters);
}
}
}
集成测试扩展了这个类:
public class ChallengeIT extends AbstractDatabaseIT {
@Autowired
private ChallengeRepository repository;
// tests here
所有其他非集成类都有
@SpringBootTest
注释,以及使用@Autowired注入的依赖项(这可能是个问题?)
@SpringBootTest
class EthMessageVerifierTest {
@Autowired
private EthMessageVerifier ethMessageVerifier;
// tests here
我错过了什么?我记得在很多项目中都看到了H2数据库的依赖性。我应该放弃测试容器而选择H2吗?或者我可以为所有其他测试创建一个testcontainer实例吗?
用@SpringBootTest
注释的测试尝试填充整个Spring上下文。这包括所有bean:Web层、业务逻辑、数据库设置等。
因此,运行整个应用程序所需的所有架构体系(例如消息传递队列、远程系统、数据库)也需要用于此类测试。
所以@SpringBootTest
也表示联调,您需要在应用程序启动时提供数据库设置,Spring Boot的自动配置会尝试配置您的DataSource
。
欲了解更多信息,请参阅本文关于@ SpringBootTest和这个概述单位
我有一个带hibernate的SpringBoot应用程序。在我的测试中,我想禁用任何类型的数据库连接和配置(测试不能访问数据库)。我该怎么做? 我的测试类是用注释的,并且具有属性。禁用所有数据库交互的正确注释值是多少?
在使用Node.js之前,我只使用过PHP。在使用MYSQL时,我能够在PHP中做的是,我可以将database.PHP文件包含在我想要执行查询的文件中。 在Node.js中似乎不是这样。这是我的database.js文件 那么我需要在我的文件login.js中这样做 但是,当我尝试运行时,我发现db.query不是一个函数。 这是为什么?不应该更复杂还是应该?
我有以下测试: 你能给出解决这个问题的最佳方法吗?我在MapStruct 1.3.1上。决赛
问题内容: 我是Java的新手,甚至还不是Java数据库连接的新手。当我将它放在Main类中时,我设法创建了一个数据库连接并查询了一个表。现在,将其移到名为Connection的新类中,我遇到了错误: 我收到一条错误消息,说找不到符号。符号:方法createStatement()和con = DriveManager .....不可比拟的类型。 有人可以帮忙吗? 另外,最好的做法是将连接放在这样的
连接数据库 在能够对MongDB进行操作之前,需要使用BuguFramework创建一个数据库连接,代码如下: BuguConnection conn = BuguFramework.getInstance().createConnection(); conn.connect("192.168.0.100", 27017, "mydb", "username", "password"); 也可以
一、全局配置定义 return array( 'DB_TYPE' => 'mysql', 'DB_HOST' => '127.0.0.1', 'DB_NAME' => 'thinkcmf', 'DB_USER' => 'root', 'DB_PWD' => 'root', 'DB_PORT' => '3306', 'DB_PREFIX' =>