在我使用Spock和Testcontainers进行单元测试期间,JpaRepository运行不正常,并且没有正确连接,即使在非集成测试中,这个问题也会持续存在。
正如在另一次讨论中所建议的,我试图通过向pom.xml文件添加spock-spring依赖项来解决这个问题,但没有成功。
不管是什么场景,存储库在所有示例中都一致地返回null。
示例:
@Testcontainers
class PostgresTestContainer extends Specification {
@Autowired
private PersonRepository personRepository
@Shared
PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine")
.withDatabaseName("test")
.withUsername("test")
.withPassword("test")
def "waits until postgres accepts jdbc connections"() {
when: "querying the database"
def response = personRepository.findAll()
then: "result is returned"
response == 0
}
}
2条答案
按热度按时间vuktfyat1#
正在使用
PostgresContainer
和Testcontainers
注解初始化数据库。但是,您的测试基础结构不知道该数据库。如果使用spring boot,则会遗漏一些内容1.在类的顶部添加
SpringBootTest
或DataJpaTest
注解,这样就可以使用正确的类创建spring应用程序上下文,并注入PersonRepository
1.切换到
1.为了利用Testcontainers提供的数据库,添加
kuarbcqp2#
我建议像下面这样分离容器设置:
PostgresEnvrionement
PostgresTestContainer
在测试文件中扩展
PostgresEnvironment
在test目录下的参考资料部分的
application-test.yml
文件中还要确保在启动应用程序时使用的主
application.yml
文件(不是用于运行测试的)与测试概要文件的语法匹配。