У меня есть приложение для микронавтов, выполняющее базовый поиск в базе данных, просто для тестирования инфраструктуры. Я настроил приложение с миграцией базы данных 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');
"""
Полагаю, я мог бы создать блок очистки, где я выполняю операторы удаления, но я вижу это в качестве крайней меры, поскольку я ожидаю, что источник данных будет чистым перед каждым запуском теста.