1

フレームワークをテストするためだけに、このmicronautアプリケーションで基本的なデータベース検索を実行しています。テストセットアップでh2データベースを実行して、flywayデータベース移行でアプリケーションをセットアップしました(本番環境ではpostgresqlを使用します)。これは、スキーマを正しく設定するために使用されます。

私のリポジトリは jpa の Micronaut データを使用して作成されているため、micronaut の完全なコンテキストでテストを実行しないと、リポジトリを作成する方法がわかりません。

私のテストでは、いくつかのスポック テストを実行する前に、setup メソッドにデータを挿入しようとしました。セットアップが 1 回実行されると、次のテスト実行のためにクリーンなデータソースで開始されることを期待します。データは一意の制約に違反するため、実行中の 2 番目のテストのセットアップで 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');
            """

delete ステートメントを実行するクリーンアップ ブロックを作成できると思いますが、各テスト実行前にデータソースがクリーンであると予想されるため、これは最後の手段だと思います。

4

1 に答える 1