Ich habe vor kurzem mit der Programmierung in Scala begonnen. Ich habe ein Projekt mit einer Hierarchie von Klassen, die sich gegenseitig anrufen. Schließlich rufen sie zuletzt ein Singleton-DAL-Objekt (Data Access Layer) auf, das eine gespeicherte Prozedur in MySQL aufruft.So verwenden Sie Mocks in Scala, um ein Singleton-Objekt zu verspotten
Ich habe ein DAL-Objekt mit der folgenden Signatur:
def callStoredProcedure(procName: String, params: Array[String]): Boolean
Ich möchte einen Test schreiben, die eine Funktion der Top-Level-Klasse aufruft, und prüft, was procName
an die übergeben wurde Funktion.
Wie gehe ich vor, um ein Mock für das DAL-Objekt zu erstellen? Wie kann ich es in die Prozesspipeline injizieren, oder gibt es eine bessere/empfohlene Möglichkeit, das Singleton durch einen Schein zu ersetzen, der nur den Prozedurennamen zurückgibt, anstatt ihn aufzurufen?
Wir verwenden derzeit Mockito, aber ich bin offen für alles.
Wie die Hilfe ist, wenn ich fragen darf? Ich möchte den Namen des gespeicherten Procs abrufen, ohne dass er tatsächlich aufgerufen wird. Spionage wird das nicht tun. Verspotten würde immer noch eine Injektion durch alle Schichten erfordern. Korrigiere mich, wenn ich falsch liege? –
Ja, 'Mock [DAL.type]' benötigt eine Injektion, genau wie Dima es zeigte, ohne sich mit einem Merkmal herumschlagen zu müssen. 'spy (DAL)' ist eigentlich nicht relevant für Sie, da es die Funktion tatsächlich berechnet. Ich bearbeite meine Antwort. – Joan