Frage

Ich fand diese Beispiel wo sie PowerMock und EasyMock zu Stub verwendet / verspotten das Menü und MENUITEM Klassen für android. Ich habe versucht, etwas ähnliches mit PowerMock und Mockito mit der Aktivitätsklasse zu tun.

Ich verstehe, dass viele der Methoden sind endgültig und dass in der Android.jar sie alle nur Runtime werfen ( „Stub“).

Ich verstehe auch, dass dieser Test nicht abgeschlossen ist, aber ich will nur sehen, ob es möglich ist, die Android-Aktivitätsklasse zu verspotten.

Aber da PowerMock können Sie Mock-Klassen mit der endgültigen Methoden sollten nicht dieser Code funktioniert?

@RunWith(PowerMockRunner.class)
@PrepareForTest(Activity.class)
public class MyTestCase extends TestCase {

    public void testPlease_JustWork() throws Exception {
        Activity mockActivity = PowerMockito.mock(Activity.class);

        PowerMockito.when(mockActivity.getTitle()).thenReturn("Title");
    }
}

Ich würde denken, dass der Runtime nicht mehr auftreten würde und „Titel“ zurückgegeben werden würde, aber es wirft immer noch die Ausnahme.

Ich habe alle Arten von verschiedenen Sachen ausprobiert wie doReturn("Title").when(mockActivity).getTitle(); und suppress(constructor(Activity.class));

Bin ich etwas falsch oder ist dies einfach nicht möglich?

War es hilfreich?

Lösung

ich Ihr Codebeispiel gerade versucht, und es funktioniert hier, seltsam. Ich heruntergeladen PowerMock 1.4.5 mit Mockito und JUnit einschließlich Abhängigkeiten und verwendet, um die android.jar vom sdk (2.2). Es schlägt fehl, nur mit der Ausnahme, wenn ich die @PrepareForTest entfernen.

EDIT

Sie können die android.jar mit dem entfernten Ausnahmecode verwenden, in dem Artikel zur Verfügung gestellt Sie verwiesen wird.

Andere Tipps

Wahrscheinlich nicht eine direkte Antwort auf Ihre Frage, aber man könnte versuchen Robolectric , um Test Teile Ihren Android-App auf Ihrem PC.

Roboelectric vermeidet die Stub! Ausnahme und gibt Ihnen einige minimal Android Klassen Implementierung

Ich denke, die Antwort ist, dass die Reihenfolge der referenzierten Bibliotheken wichtig, weil die android.jar einige Stubs für junit enthält.

Sie haben, dass auf dem Testprojekt, um sicherzustellen, wenn Sie auf ‚Eigenschaften‘ gehen und dann ‚Java Build Path‘, dass das junit Glas mit der Vollversion von PowerMock zugeordnet Sie auf dem ‚Order und Export‘ angezeigt heruntergeladen Registerkarte oben die android.jar. Wenn dies nicht der Fall, löst das System die junit.framework und junit.runner Pakete von android.jar bevor er sie aus dem junit.jar in PowerMock enthalten aufgelöst wird.

Ich weiß, diese Frage ist alt, aber ich denke, das ist die richtige Antwort ist, so dass ich sicherstellen wollte, dass es auf die Frage zu dokumentieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top