Настройка источника данных MicronautTest не очищается перед каждым выполнением - PullRequest
0 голосов
/ 08 октября 2019

У меня есть приложение для микронавтов, выполняющее базовый поиск в базе данных, просто для тестирования инфраструктуры. Я настроил приложение с миграцией базы данных flyway, запустив базу данных h2 в моей тестовой установке (производство использует postgresql). Это используется для правильной настройки схемы.

Мой репозиторий создается с использованием данных Micronaut для jpa, поэтому я не знаю, как его создать, не выполняя тесты в полном контексте микронавтов.

В своем тесте я пытаюсь вставить некоторые данные вметод установки перед выполнением некоторых тестов спока. Когда установка запустится один раз, я ожидаю, что она начнется с чистого источника данных для следующего выполнения теста. Поскольку данные будут нарушать уникальное ограничение, они завершаются с ошибкой sql при настройке второго запускаемого теста. Вот мой код:

@MicronautTest()
class CompanyRepositoryTest extends Specification {

    @Inject
    CompanyRepository repository
    @Inject
    DataSource dataSource

    def sql

    def setup() {
        sql = new Sql(dataSource: dataSource)
        sql.execute(dataSql)
    }

    def 'test company creation' () {
        given:
            def name = 'test2'
            def orgNumber = '1232429045'
        when:
            def company = repository.save(new Company(name: name, organizationNumber: orgNumber))
        then:
            company.id != null
    }

    @Unroll
    def 'get company for #desc'() {
        when:
            Company result = repository.find(id)
        then:
            name == null ? result == null : name == result.name
        where:
            id | name    | desc
            1  | 'test1' | 'existing company'
            2  | null    | 'non-existing company'
    }

    def dataSql = """
            insert into company(name, organization_number) values
            ('test1', '1232429045');
            """

Полагаю, я мог бы создать блок очистки, где я выполняю операторы удаления, но я вижу это в качестве крайней меры, поскольку я ожидаю, что источник данных будет чистым перед каждым запуском теста.

1 Ответ

0 голосов
/ 09 октября 2019

После хорошего ночного сна мне пришел очевидный ответ. Вместо того, чтобы выполнять sql через groovy sql, я использую entitymanager. Тогда это работает как ожидалось

    @Inject
    EntityManager entityManager

    def setup() {
        entityManager.createNativeQuery(dataSql).executeUpdate();
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...