Kurz vor der Manipulation von Byte-Code ist die Antwort nein, es sei denn, Sie sind bereit und in der Lage, den Code zu ändern. Der einfachste Weg (und die Art und Weise, wie ich es empfehlen würde), 's Call to SomeObject.someFun()
zu verspotten, ist es, einen Weg zu bieten, um ein Mock-Objekt zu rutschen.
z.B.
object SomeObject {
fun someFun() {}
}
fun callerFun() {
_callerFun { SomeObject.someFun() }
}
internal inline fun _callerFun(caller:() -> Unit) {
caller()
}
Die Idee hier ist, etwas zu ändern, das Sie bereit sind zu ändern. Wenn Sie sicher sind, dass Sie eine Singleton- und eine Top-Level-Funktion für diesen Singleton verwenden möchten, können Sie die Implementierung der Top-Level-Funktion testen, ohne die öffentliche Signatur zu ändern, indem Sie die Implementierung in eine internal
-Funktion verschieben das erlaubt, einen Schein zu rutschen.
Das sieht wie ein Anti-Muster ... Man sollte keine zusätzlichen Klassen/Schnittstellen im Hauptcode nur für den Zweck des Testens erstellen! – Kerooker
Keine zusätzlichen Klassen, nur Schnittstellen. Und Sie sollten es tun, weil dies die beste Vorgehensweise für das Testen auf JVM ist. – IRus