Kotest コンパイラマッチャー(Compiler Matchers)

コンパイラマッチャーについて説明する。

kotest-assertions-compiler 拡張は、指定した Kotlin コード片がコンパイルされるかどうかを確認するマッチャーを提供する。この拡張は kotlin-compile-testing のラッパーであり、次のマッチャーを提供する。

  • String.shouldCompile()
  • String.shouldNotCompile()
  • File.shouldCompile()
  • File.shouldNotCompile()

コンパイルマッチャーを追加するには、プロジェクトに次の依存関係を追加する。

testImplementation("io.kotest.extensions:kotest-assertions-compiler:${version}")

書き方:

class CompilationTest: StringSpec() {
    init {
        "shouldCompile test" {
            val codeSnippet = """ val aString: String = "A valid assignment" """.trimMargin()

            codeSnippet.shouldCompile()
            File("SourceFile.kt").shouldCompile()
        }

        "shouldNotCompile test" {
            val codeSnippet = """ val aInteger: Int = "A invalid assignment" """.trimMargin()

            codeSnippet.shouldNotCompile()
            File("SourceFile.kt").shouldNotCompile()
        }
    }
}

コード片のコンパイルを検査する間、呼び出しプロセスのクラスパスが継承されるため、呼び出しプロセスで使用できるすべての依存関係は、コード片をコンパイルする間にも使用できる。

指定した Kotlin コードがコンパイルされるかどうかを確認するマッチャー:

マッチャー 説明
string.shouldCompile() 文字列が有効な Kotlin コードであることを確認する。
file.shouldCompile() ファイルに有効な Kotlin コードが含まれることを確認する。

参照