2017-09-13 3 views
0

Ich schreibe Unit-Tests für ein Verfahren, das id in Argumente, das so etwas wie unten:Mockito - Mocking eine Methode mit Parametern

public void searchid(String id) { 
    Document doc = Repository.findDocument(id); //returns a document 
    if (doc == null) { 
     System.out.println("id missing"); 
    } else { 
     String stringRecord = doc.asJsonString(); //converting doc to string 

Hier Repository.findDocument(id) ist ein Dokument zurück. In meinem Komponententest erhalte ich die JSON-Datei von src/test/resources. Also, wie mache ich Repository.findDocument(id) Mock, um stattdessen die Datei von meiner Ressource zu holen?

Danke,

+2

Ist 'Repository.findDocument()' a 'static' Methode? –

+0

Eine ähnliche Frage wurde hier beantwortet: https://stackoverflow.com/questions/21105403/mocking-static-methods-with-mockito. – canihazurcode

+0

Nein. Ich bin Autowiring und dann 'findDocument' verwenden – AYa

Antwort

1

Der Schlüssel zur Testbarkeit ist, dass Sie ein Feldrepository haben, das Konstruktor-injiziert in Ihre Klasse bekommt. Auf diese Weise können Sie das reale Repository leicht durch eine falsche Instanz ersetzen (z. B. einen Mockito-Mock).

Die beste Quelle für das Lernen, wie prüfbaren Code zu schreiben, dass ich weiß, ist http://misko.hevery.com/code-reviewers-guide/

0

Sie können versuchen, den Repository.findDocument(id) Anruf in Ihrer Unit-Test-Methode zu verspotten.

Mockito.when(Repository.findDocument(Mockito.isA(String.class))).thenReturn(Mockito.mock(Document.class)); 

Dies wird verspottet Document-Objekt zurück, wenn der Repository.findDocument(id) Anruf getätigt wird.

+0

Also, ich sollte die JSON-Datei analysieren und speichern Sie die ID und übergeben Sie es in der obigen Funktion ryt? – AYa

+0

Sorry habe nicht bemerkt, dass Sie Document-Objekt benötigen, ich habe meine Antwort bearbeitet. Wenn Sie Document-Objekt mit benutzerdefinierten Daten vortäuschen möchten, könnten Sie es tun. – Venkat

+0

Und wo soll ich meine Methode 'searchid (id)' nennen? – AYa

Verwandte Themen