Ihr Problem ist: scala ist nicht java.
Ihre implizite Annahme ist: "diese kleine Scala-Methode wird dort in etwas Ähnliches in Java übersetzt, und damit kann ich einfach Mockito verwenden, um damit umzugehen".
Falsch. Sie erstellen hier eine Scala Objekt Definition; und wenn ich mich richtig erinnere; Objekt in Scala ... übersetzt in statische in Java (siehe zum Beispiel here).
So müssen Sie sich auf den ersten Blick wahrscheinlich zu PowerMock (ito) resp. JMockit, um diese statischen Elemente zu verspotten. (und meine übliche Warnung: Verwenden Sie nicht PowerMock; weil spotten statische Sachen ist eine schlechte Idee). Und wie Philipp M in seinem Kommentar darauf hinweist: Spott statisch ist wirklich schlechte Praxis angesehen. Sie sollten lieber versuchen, die "Trait" -Seite der Dinge hier zu verspotten.
Also die wirkliche Antwort ist: Sie müssen wissen, was Sie tun. Mockito ist für java geschrieben. Sie können nicht einfach davon ausgehen, dass alles, was Sie in scala schreiben und das irgendwie wie Java aussieht, leicht den Konzepten zugeordnet werden kann, an denen Mockito arbeitet.
Um wirklich zu verstehen, was vor sich geht; Sie sollten sich zuerst die Klassendateien ansehen, die der scala-Compiler in Ihrem Fall erstellt; prüfe die Methodensignatur; und denke selbst: "Wenn ich diese Methode im Java-Quellcode aufrufen müsste, wie würde ich das machen?" und arbeite von dort.
ich mit der ersten Hälfte dieser Antwort einverstanden - Scala 'object's Singletons und sollten als solche behandelt werden. Was mir nicht gefällt, ist die Idee, PowerMock zu benutzen, um das zu umgehen und Bytecode während der Testausführung zu manipulieren. Meiner Meinung nach wäre es viel besser, wenn das 'Objekt' ein' Merkmal' implementiert, wie Sie es bereits getan haben, und stattdessen das Merkmal verspotten. –
Entschuldigung, meine Antwort wurde zur Hälfte geschrieben, und geben Sie es ein :) –
Got it ... und fügte das der Antwort hinzu. Und ich stimme völlig zu. – GhostCat