2010-09-17 7 views
9

Ich fand diese example, wo sie PowerMock und EasyMock verwendet, um die Menü- und MenuItem-Klassen für android stub/mock. Ich habe versucht, etwas ähnliches mit PowerMock und Mockito mit der Activity-Klasse zu tun.Versuch, Android-Aktivität zu stummeln, die PowerMockito verwendet, wirft RuntimeException "Stub!"

Ich verstehe, dass viele der Methoden endgültig sind und dass sie in der Android.jar alle nur RuntimeException werfen ("Stub!").

Ich verstehe auch, dass dieser Test nicht abgeschlossen ist, aber ich will nur sehen, ob es möglich ist, die android Activity-Klasse zu verspotten.

Aber da PowerMock Ihnen erlaubt, Klassen mit finalen Methoden zu verspotten, sollte dieser Code nicht funktionieren?

Ich würde denken, dass die RuntimeException würde nicht mehr auftreten und "Titel" würde zurückgegeben werden, 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 zu tun einfach nicht möglich?

Antwort

0

Ich habe gerade versucht, Ihr Code-Beispiel und es funktioniert hier, seltsam. Ich habe PowerMock 1.4.5 mit Mockito und JUnit inklusive Abhängigkeiten heruntergeladen und die android.jar von der sdk (2.2) benutzt. Es schlägt nur mit der Ausnahme fehl, wenn ich @PrepareForTest entferne.

EDIT

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

+0

Ich werde es versuchen ... – bytebender

+0

Kein Würfel, können Sie mir zeigen, wie Ihre Importlinien aussehen? – bytebender

+0

Ich habe das gesamte Eclipse-Projekt auf http://maik.0x2a.at/PowerMockTests.zip hochgeladen. Du musst vielleicht den Pfad zu android.jar anpassen. – crazymaik

5

Wahrscheinlich keine direkte Antwort auf Ihre Frage, aber Sie könnten Robolectric ausprobieren, um Teile Ihrer Android App auf Ihrem PC zu testen.

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

2

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

Sie müssen sicherstellen, dass in Ihrem Testprojekt, wenn Sie zu "Eigenschaften" und dann "Java Build Path" gehen, dass die junit jar mit der Vollversion von powermock, die Sie heruntergeladen haben, auf der 'Bestellung und Export' angezeigt werden Registerkarte über die android.jar. Wenn dies nicht der Fall ist, löst das System die Pakete junit.framework und junit.runner von android.jar auf, bevor es sie aus der junit.jar, die in powermock enthalten ist, auflöst.

Ich weiß, dass diese Frage alt ist, aber ich denke, das ist die richtige Antwort, also wollte ich sicherstellen, dass es auf der Frage dokumentiert wird.