Matchers del Compilador
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
La extensión kotest-assertions-compiler proporciona matchers para verificar si un fragmento de código Kotlin compila o no.
Esta extensión es un wrapper sobre kotlin-compile-testing e incluye los siguientes matchers:
String.shouldCompile()
String.shouldNotCompile()
CodeSnippet.shouldCompile()
CodeSnippet.shouldNotCompile()
File.shouldCompile()
File.shouldNotCompile()
Para añadir los matchers de compilación, agrega esta dependencia a tu proyecto:
testImplementation("io.kotest.extensions:kotest-assertions-compiler:$version")
Uso:
class CompilationTest : FreeSpec({
"shouldCompile test" {
val rawStringCodeSnippet = """
val aString: String = "A valid assignment"
"""
val syntaxHighlightedSnippet = codeSnippet("""
val aString: String = "A valid assignment"
""")
rawStringCodeSnippet.shouldCompile()
syntaxHighlightedSnippet.shouldCompile()
File("SourceFile.kt").shouldCompile()
}
"shouldNotCompile test" {
val rawStringCodeSnippet = """
val anInteger: Int = "An invalid assignment"
"""
val syntaxHighlightedSnippet = codeSnippet("""
val anInteger: Int = "An invalid assignment"
""")
rawStringCodeSnippet.shouldNotCompile()
syntaxHighlightedSnippet.shouldNotCompile()
File("SourceFile.kt").shouldNotCompile()
// check that a compilation error occurred for a specific reason
rawStringCodeSnippet.shouldNotCompile("expected 'Int', actual 'String'")
syntaxHighlightedSnippet.shouldNotCompile("expected 'Int', actual 'String'")
File("SourceFile.kt").shouldNotCompile("expected 'Int', actual 'String'")
}
@OptIn(ExperimentalCompilerApi::class)
"custom assertions on JvmCompilationResult" {
val codeSnippet = codeSnippet("""
fun foo() {
printDate(LocalDate.now())
}
""")
codeSnippet.compile {
exitCode shouldBe ExitCode.COMPILATION_ERROR
messages shouldContain "Unresolved reference 'LocalDate'"
messages shouldContain "Unresolved reference 'printDate'"
}
}
@OptIn(ExperimentalCompilerApi::class)
"custom compiler configuration" {
val compileConfig = CompileConfig {
compilerPluginRegistrars = listOf(MyCompilerPluginRegistrar())
}
val codeSnippet = compileConfig.codeSnippet("""
@MyAnnotation
fun hello() {}
""")
codeSnippet.shouldCompile()
}
})
Durante la verificación de compilación de fragmentos de código, se hereda el classpath del proceso invocador. Esto significa que cualquier dependencia disponible en el proceso invocador también estará disponible durante la compilación.
Matchers que verifican si un fragmento de código Kotlin compila o no
| Matcher | Description |
|---|---|
String.shouldCompile() | Asserts that the raw string snippet compiles |
CodeSnippet.shouldCompile() | Same as above, with syntax highlighting |
File.shouldCompile() | Same as above, from a file |
String.shouldNotCompile(msg?) | Asserts it fails, optionally for a specific reason |
CodeSnippet.shouldNotCompile(msg?) | Save as above, with syntax highlighting |
File.shouldNotCompile(msg?) | Same as above, from a file |