有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正试图用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/”下的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

我也在我的构建中包含了这一点。格雷德尔锉刀

runtime 'com.h2database:h2'

有什么办法解决这个问题吗

编辑:这是我的存储库类

@Repository
public interface HelloRepository extends CrudRepository<BufferConditionEntity, Long> {}


共 (1) 个答案

  1. # 1 楼答案

    Is there any way to solve this?

    如何做到这一点的细节将取决于对你的项目有更多的了解。 您没有显示足够的信息来了解问题所在,因此我将您的代码粘贴到一个项目中,这表明您问题中的代码似乎有效。唯一不清楚的是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
    

    那项测试通过了