当前位置: 首页 > 知识库问答 >
问题:

在micronaut中为集成测试配置数据库

宗政欣可
2023-03-14

我正在尝试用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  
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

runtime 'com.h2database:h2'
@Repository
public interface HelloRepository extends CrudRepository<BufferConditionEntity, Long> {}

共有1个答案

朱俭
2023-03-14

这有什么办法解决吗?

是的。

如何做到这一点的细节将取决于对您的项目有更多的了解。您还没有显示足够的信息来了解错误所在,所以我将您的代码粘贴到一个项目中,该项目显示您问题中的代码似乎可以工作。唯一不清楚的是initmocks方法的功能。

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());
    }
}
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
    }
}
package com.myproject.project;

import io.micronaut.data.annotation.Repository;
import io.micronaut.data.repository.CrudRepository;

@Repository
public interface HelloRepository extends CrudRepository<BufferConditionEntity, Long> {
}
---
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

测试通过了。

 类似资料:
  • 我有一些问题。 允许在集成测试类中自动拥有控制器? 如何为这个控制器创建bean. 我有配置问题:help:

  • 我正在使用Spring Boot(打包到没有SpringBoot运行程序的经典WAR),我想在Spock中实现集成测试。当我使用时,只使用标准Spring上下文(没有从Boot获得任何好处,例如。

  • 在开发中,我使用下面的配置连接到MySQL数据库。我喜欢使用Tomcat数据源进行MySql连接。在Micronaut文档页面中没有找到示例。

  • 我如何配置我的Spring Boot应用程序,以便当我运行单元测试时,它将使用内存中的数据库(如h2/hsql),而当我运行Spring Boot应用程序时,它将使用生产数据库[postgre/mysql]?

  • 下面是一个最小的例子: project/build.scala src/test/scala/helpers.scala 然后,在sbt中,“test”起作用: 但是“it:test”不能编译:

  • 我正在尝试为流配置实现一些测试。我将JMS入站通道适配器作为流的入口点,并将出站文件通道适配器(带有附加的ExpressionEvaluatingRequestHandlerAdvice)作为最后一个endpoint。 下面是一个示例代码: null 谢谢你。