2017-08-02 3 views
1

Ich fülle den Cursor und FragmentManager Wert innerhalb der PageAdapter Klasse zu definieren, aber während des Testprozesses bringt es Cursor und FragmentManager als null für immer.Wie Mock Cursor für Android Unit Test

Wie kann ich Test konfigurieren, um Cursor und FragmentManager mit einem gültigen Wert zu erhalten?

public class PagerAdapter extends FragmentStatePagerAdapter { 
    private Cursor mCursor; 

    public PagerAdapter(FragmentManager fm, Cursor aCursor) { 
    super(fm); 
    mCursor = aCursor; 
    } 

Prüfregeln Block ist unten:

@RunWith(MockitoJUnitRunner.class) 
public class PagerAdapterTest extends Assert{ 
    @Mock 
    private PagerAdapter mPagerAdapter; 

    private FragmentManager fm; 
    private Cursor mCursor; 

    @Before 
    public void setUp() throws Exception { 
    mPagerAdapter = new PagerAdapter(fm, mCursor); 
    } 
+0

Mögliches Duplikat von [Ist Java "pass-by-reference" oder "pass-by-value"?] (Https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or -pass-by-value) – GhostCat

+0

Dieser Code kann ** nicht ** funktionieren! Die Verweise 'fm' und' mCursor' werden ** nicht ** geändert, wenn Sie Variablen Variablen zuweisen, die Parameter einer Methode sind. Dies wird immer unterbrochen, nicht nur in Ihrem Komponententest. Das ist grundlegend falsch auf einem grundlegenden Java-Level. – GhostCat

+0

Ich muss ein Objekt für den Unit-Test erstellen und füllen. Ich bin auf der Suche nach einer Möglichkeit, dies zu tun, und ich bin stecken geblieben :(Haben Sie einen Vorschlag für mich, diese Objekte auszufüllen? – hpolat

Antwort

0

Ihr Problem ist "einfach" - in Ihrem Testcode:

private FragmentManager fm; 
private Cursor mCursor; 

sind beide null. SO dies:

mPagerAdapter = new PagerAdapter(fm, mCursor); 

Vielleicht angenommen, dass @Mock alle Felder verspottet - nee, sorry: es nur verhöhnt die erste Feld danach erklärt!

Ihr Code ist nur new PageAdapter(null, null). Der springende Punkt ist: Sie müssen Mock verschiedene Core-Infrastruktur-Elemente, die von dem Android-System in der "realen Welt" zur Verfügung gestellt werden.

Und darüber hinaus scheinen Sie nicht zu verstehen wie Spott und Unit Tests zusammen kommen. Sie möchten Test Ihre PageAdapter-Klasse - und in diesem Fall macht es keine Sinn zu Mock der PageAdapter-Klasse. Sie erstellen Mocks für die Objekte, die Sie benötigen Feed in Ihre Klasse testen, um diese Klasse zu testen. In diesem Sinne sollten Sie erste Studie die Grundlagen Einheit testen und spotten (idealerweise ohne die Komplexität von Android hinzugefügt). Beginnen Sie zum Beispiel mit dem Lesen von here.

Und dann, wenn Sie "diesen Teil" haben, lesen und befolgen Sie die umfangreiche Dokumentation, die Ihnen erklärt, wie Sie eine "Arbeits" Einheit Testumgebung für Android einrichten. Siehe zum Beispiel here.

+0

Vielen Dank, Ghostcat, Ich überprüfe die Beispiele, die Sie angegeben haben. – hpolat