Ist es möglich, Mocks zu Testzwecken mit AndroidAnnotations zu injizieren?

8

Ich habe keine Beispiele dafür gefunden. Ich gehe davon aus, dass es nicht möglich ist, basierend auf Beispielen wie folgt:

%Vor%

wo die zu injizierende Klasse bereits festgelegt ist.

    
apollodude217 05.05.2012, 17:41
quelle

2 Antworten

6

Die Frage ist, ob Sie Komponententests oder Integrationstests durchführen?

Wenn Sie Komponententests durchführen, würde ich vorschlagen, die altmodische Methode zu verwenden, indem Sie einen Setter verwenden und versuchen, den Java-Code ohne das involvierte Abhängigkeitsinjektions-Framework zu testen. Dies wird Ihre Klasse isoliert testen und eine Menge Komplexität umgehen.

Was ich meine:

%Vor%

Natürlich ist das Testen von Android-Aktivitäten (und anderen Erweiterungen von Android) schwierig, da die Ausnahme Stubs und finale Klassen / Methoden auslöst. Hier ist Robolectric nützlich (und sehr empfehlenswert), um die Android-API instanziieren / spiegeln zu können.

Wenn Sie Integrationstests durchführen, sollten Sie einen anderen Ansatz wählen. Persönlich würde ich versuchen, während Integrationstests nicht zu spotten, während ich versuche, die Anwendung so zu testen, wie sie in der Produktion laufen würde. Aber wenn Sie wirklich nachspionieren möchten, können Sie einen ähnlichen Ansatz für Komponententests verwenden und einen Mock einführen, nachdem Sie Ihre generierte Aktivitätsklasse aufgestanden haben. Beachten Sie, dass Sie Integrationstests direkt auf der Hardware mithilfe von Frameworks wie Robotium durchführen können.

Mehr zu Ihrer Frage, mir sind keine Einrichtungen von AndroidAnnotations bekannt, speziell um Mocks zu injizieren oder Mocks in den injizierten Abhängigkeitsbaum einer Anwendung einzuführen.

    
John Ericksen 14.05.2012, 16:14
quelle
8

Eine Ergänzung zu johncarl Antwort:

  • Es gibt keine Möglichkeit AndroidAnnotations mitzuteilen, dass Sie Mocks anstelle von realen Objekten injizieren möchten, da es zur Kompilierungszeit funktioniert, also muss der Code immer produktionsbereit sein.

  • Ich würde empfehlen, die generierten Aktivitäten zusätzlich zu Robolectric zu testen. Die Anmerkungen fügen deinem Code ein Verhalten hinzu, sodass du es nicht so testen solltest, als ob es keine Anmerkungen gäbe.

  • Seien Sie vorsichtig, wenn Sie das Verhalten Ihrer Aktivitäten testen, nicht das Verhalten von AndroidAnnotations. Das Framework hat bereits eigene Tests, um zu überprüfen, ob die Anmerkungen korrekt funktionieren:).

  • Sie können AndroidAnnotations DI zulassen und anschließend die mokierte Abhängigkeit neu einleiten. Die Felder haben mindestens den Standardbereich, was bedeutet, dass sie vom selben Paket aus zugänglich sind. Daher müssten Sie den Test im selben Paket wie die Aktivität erstellen.

    %Vor%
  • In AndroidAnnotations werden Abhängigkeiten durch Aufruf von MyImplementation_.getInstance_() eingefügt. Sie können die Laufzeit-Bytecode-Manipulation mit einem Tool wie PowerMock verwenden, damit die getInstance_() -Methode von MyImplementation_ den Wert a zurückgibt spotten. Dies kann jedoch einige anfängliche Arbeit erfordern, da Sie PowerMock Test Runner und Robolectric Test Runner mischen müssen.

Bearbeiten: Ich habe die Dokumentation mit Inhalten basierend auf dieser Frage aktualisiert.

    
Pierre-Yves Ricau 19.05.2012 15:18
quelle