在 micronaut 中为集成测试配置数据库
Posted
技术标签:
【中文标题】在 micronaut 中为集成测试配置数据库【英文标题】:Configuring database for integration tests in micronaut 【发布时间】:2020-05-25 16:40:08 【问题描述】:我正在尝试在 micronaut 中编写集成测试。
我有一个控制器类:
@Controller("/hello")
public class HelloController
@Inject
private HelloRepository helloRepository;
@Get("/")
public HttpResponse get()
return HttpResponse.ok(helloRepository.findAll());
我正在尝试为它编写一个集成测试,例如:
@MicronautTest
public class HelloControllerSpec
@Inject
EmbeddedServer embeddedServer;
@BeforeEach
void setUp()
initMocks(this);
@Test
public void testIndex() throws Exception
try(RxHttpClient client = embeddedServer.getApplicationContext().createBean(RxHttpClient.class, embeddedServer.getURL()))
client.toBlocking().exchange("/hello").status();
但我不断收到错误消息:
No backing RepositoryOperations configured for repository. Check your configuration and try again
我放在“src/test/java/resources/”下的 application.yml 文件具有以下数据源实现:
datasources:
default:
url: jdbc:h2:mem:devDb
driverClassName: org.h2.Driver
username: sa
password: 'sa'
schema-generate: CREATE_DROP
dialect: H2
jpa:
default:
packages-to-scan:
- 'com.myproject.project'
properties:
hibernate:
hbm2ddl:
auto: update
show_sql: true
我也将它包含在我的 build.gradle 文件中
runtime 'com.h2database:h2'
有没有办法解决这个问题?
编辑:这是我的存储库类
@Repository
public interface HelloRepository extends CrudRepository<BufferConditionEntity, Long>
【问题讨论】:
你能显示HelloRepository
的源代码吗?
好的。我已经在编辑中添加了它。
【参考方案1】:
有没有办法解决这个问题?
是的。
如何做到这一点的细节取决于对您的项目的更多了解。
您没有显示足够的信息来知道出了什么问题,所以我将您的代码粘贴到一个项目中,该项目表明您问题中的代码似乎有效。唯一不清楚的是您的 initMocks
方法的作用。
在https://github.com/jeffbrown/rajshreerairepository查看项目。
https://github.com/jeffbrown/rajshreerairepository/blob/4abe71d7a4ac9ae3cbcdb164f4d2c58249e29106/src/main/java/com/myproject/project/HelloController.java
package com.myproject.project;
import io.micronaut.http.HttpResponse;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import javax.inject.Inject;
@Controller("/hello")
public class HelloController
@Inject
private HelloRepository helloRepository;
@Get("/")
public HttpResponse get()
return HttpResponse.ok(helloRepository.findAll());
https://github.com/jeffbrown/rajshreerairepository/blob/4abe71d7a4ac9ae3cbcdb164f4d2c58249e29106/src/test/java/com/myproject/project/HelloControllerTest.java
package com.myproject.project;
import io.micronaut.http.HttpStatus;
import io.micronaut.http.client.RxHttpClient;
import io.micronaut.runtime.server.EmbeddedServer;
import io.micronaut.test.annotation.MicronautTest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import javax.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertEquals;
@MicronautTest
public class HelloControllerTest
@Inject
EmbeddedServer embeddedServer;
@BeforeEach
void setUp()
initMocks(this);
@Test
public void testIndex() throws Exception
try (RxHttpClient client = embeddedServer.getApplicationContext().createBean(RxHttpClient.class, embeddedServer.getURL()))
assertEquals(HttpStatus.OK, client.toBlocking().exchange("/hello").status());
void initMocks(Object o)
// unclear if this method is relevant
https://github.com/jeffbrown/rajshreerairepository/blob/87898caad4699436c60c84b85058d29885e7ec9f/src/main/java/com/myproject/project/HelloRepository.java
package com.myproject.project;
import io.micronaut.data.annotation.Repository;
import io.micronaut.data.repository.CrudRepository;
@Repository
public interface HelloRepository extends CrudRepository<BufferConditionEntity, Long>
https://github.com/jeffbrown/rajshreerairepository/blob/87898caad4699436c60c84b85058d29885e7ec9f/src/main/resources/application.yml
---
micronaut:
application:
name: rajshreerairepository
---
datasources:
default:
url: jdbc:h2:mem:devDb
driverClassName: org.h2.Driver
username: sa
password: 'sa'
schema-generate: CREATE_DROP
dialect: H2
jpa:
default:
packages-to-scan:
- 'com.myproject.project'
properties:
hibernate:
hbm2ddl:
auto: update
show_sql: true
测试通过了。
【讨论】:
有没有办法在db中加载数据? spring 自动从类路径加载文件名 data.sql 的数据。 micronaut-data 是否支持任何类似的功能?以上是关于在 micronaut 中为集成测试配置数据库的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 Flutter 中为集成测试生成 json 报告?
Micronaut 3:如何使用 PubSubEmulatorContainer
如何在 Maven 中为 Java 项目组织单元、集成、e2e 测试文件夹结构?