2016-02-28 20 views
11

Wenn die Tests in einem anderen Modul als dem Seriencode (was üblich ist) sind, was ist der beste Weg, interne Funktionen für Tests sichtbar zu machen?Kotlin: Machen Sie eine interne Funktion für Unit-Tests sichtbar

In Java würde ich den Produktionscode und den Test im selben Paket haben und die Methoden zu testenden Paket-private machen (plus, fügen Sie eine @VisibleForTest Annotation wenn der einzige Grund dafür, dass es Paket-private eher als privat ist der Test). Leider hat Kotlin nicht das Konzept von Paket-privat.

+1

Vielleicht kann der "interne" Modifier hier helfen: https://kotlinlang.org/docs/reference/visibility-modifiers.html – marcospereira

Antwort

8

Klassen und Methoden, die mit internal Zugriffsmodifikator markiert sind, funktionieren innerhalb der aktuellen Versionen von Kotlin, Gradle und Intellij für den Zugriff auf diese Methoden aus Testklassen. Die Tools betrachten die Haupt- und Testquellenpfade als Teil desselben Moduls.

Haben Sie das schon versucht? Und wenn es fehlschlägt, sollten Sie einen Fehler melden, da dieser bereits gemeldet wurde, behoben wurde und in jeder aktuellen Version in Ordnung sein sollte.

+0

Ja, genau das habe ich mit Intellij IDEA 15 versucht. Ich werde Überprüfen Sie, dass ich die neueste Version der IDE und des Kotlin Plug-ins habe und dass meine Konfiguration korrekt ist. –

+0

Neueste Intellij IDEA 15 ist 15.0.4, mit Kotlin Plugin 1.0.0 –

+0

Es funktioniert jetzt richtig und ich habe noch nicht einmal Updates installiert. Ich habe wahrscheinlich vorher etwas falsch gemacht und war verwirrt. Cool, dass es funktioniert! Vielen Dank. –

6

Wahrscheinlich ist die einfachste Lösung, Ihre Komponententests abhängig vom internen Code im selben Modul mit dem Produktionsmodus zu platzieren und nur die Integrationstests, die die öffentliche API verwenden, im separaten Modul zu lassen.

Dies scheint vernünftig, da die internal modifier genau die Sichtbarkeit innerhalb des gleichen Moduls bedeutet.

Verwandte Themen