Настройка базы данных для интеграционных тестов в микроавтобусе - PullRequest
1 голос
/ 10 февраля 2020

Я пытаюсь написать интеграционный тест в микронавтике.

У меня есть класс контроллера:

@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  

Мой файл application.yml, который я помещаю в «src / test / java / resources /», имеет следующую реализацию источника данных:

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> {}

1 Ответ

1 голос
/ 11 февраля 2020

Есть ли способ решить эту проблему?

Да.

Детали того, как это сделать, будут зависеть от того, как вы будете больше знать о вашем проекте. Вы не показали достаточно информации, чтобы понять, что не так, поэтому я вставил ваш код в проект, который показывает, что код в вашем вопросе работает. Единственное, что неясно, это то, что делает ваш 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

Этот тест пройден.

...