Files
claude-code 325e9e42a9
werkator build succeeded after 02:45
werkator/mutation build succeeded after 04:43
werkator/publish build succeeded after 00:14
Kotlin/JVM basis support checked, limits documented (0.26.6) (#61)
Co-authored-by: claude-code <claude-code@javagil.de>
2026-10-11 16:16:47 +02:00

52 lines
2.4 KiB
Gherkin

# language: de
@optional-kotlin
Funktionalität: Kotlin-JVM-Methoden ohne falsche Quelltextzusammenfassung auswerten
Als Kotlin-Nutzer möchte ich erkennen, welche tatsächlich erzeugten JVM-Methoden
mit der dokumentierten Compiler- und PIT-Kombination ausgewertet werden können.
Die IDs der Spezifikation, MC-032 und MC-033, sind schon vergeben; daher MC-KT (ADR 0009).
@MC-KT-001
Szenario: Gewöhnliche Kotlin-Methoden mit Verzweigungen auswerten
… damit Kotlin-Code dieselbe Auswertung bekommt wie Java-Code.
Angenommen ein Kotlin-Projekt mit einer Methode mit when und zwei Überladungen von total
Wenn PIT mit werkcrappit läuft
Dann hat jede dieser Methoden einen Mutation-CRAP-Wert
Und die beiden Überladungen werden getrennt bewertet
@MC-KT-002
Szenario: Ein Lambda ist eine eigene Methode
… damit Methoden nicht wegen gemeinsamer Quelltextzeilen vereinigt werden.
Angenommen eine Funktion byDistance gibt ein Lambda mit Verzweigungen zurück
Wenn PIT mit werkcrappit läuft
Dann hat das Lambda einen eigenen Wert mit seiner eigenen Komplexität
Und byDistance zählt nur seinen eigenen Code
@MC-KT-003
Szenario: Vom Compiler erzeugte Methoden tragen einen Grund statt eines Werts
… damit kein erfundener Wert entsteht.
Angenommen eine Data Class mit einem Vergleich und eine Funktion mit Default-Argument
Wenn PIT mit werkcrappit läuft
Dann sind equals, die Bridge-Methode und copy$default mit dem Filter von JaCoCo als Grund ausgeschlossen
Und die Hilfsmethode für das Default-Argument hat keinen Wert, weil PIT sie nicht mutiert
@MC-KT-004
Szenario: Der Rumpf einer Inline-Funktion bleibt ohne Abdeckung
… damit man ihren Wert nicht als Aussage über ihre Tests liest.
Angenommen eine Inline-Funktion guarded, die nur über guardedPositive aufgerufen wird
Wenn PIT mit werkcrappit läuft
Dann sind alle Mutanten von guarded selbst ohne Abdeckung
Und guardedPositive hat einen eigenen Wert
@MC-KT-005
Szenario: Die Zustandsmaschine einer Suspend-Funktion senkt ihren Mutation Score
… damit man den höheren Wert einer Suspend-Funktion richtig einordnet.
Angenommen eine Suspend-Funktion afterPause mit einem Unterbrechungspunkt
Wenn PIT mit werkcrappit läuft
Dann hat afterPause die Komplexität ihrer eigenen Verzweigung
Und einige Mutanten der Zustandsmaschine bleiben ohne Abdeckung