2017-08-24 1 views
1

Ich entdeckte, dass insbesondere ein Test auf Pre-KitKat-Geräten konsistent fehlschlägt. Ich glaube, es hängt mit der Änderung des eingebetteten WebView zusammen, das auf älteren Android-Geräten verwendet wird (aber vielleicht ist das falsch). Wie auch immer, zurück zu meiner Frage: Ich möchte auf elegante Weise kontrollieren, ob ein Test ausgeführt wird, abhängig von der Android-Version, die auf dem Gerät ausgeführt wird.Wie können wir automatisch nur Tests auf neueren Android-Versionen ausführen?

Derzeit verwende ich Code, der den Test kurzschließt und ihn weiterleitet, wenn die Laufzeit vor KitKat liegt. Hier ist der relevante Code:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
    assertTrue("Skipping this test as the Android version is too low.", true); 
    return; 
} 

ich da versucht haben, zwei Anmerkungen wiederum zu verwenden: @TargetApi und @RequiresApi z.B.

@Test 
@RequiresApi(Build.VERSION_CODES.KITKAT) 
public void zimTest() { 
    Log.v("kiwixTesting", "Running zimTest() on Android version: " + Build.VERSION.SDK_INT); 
    ... 
} 

In beiden Fällen wurde der Test auf meinem Test-Geräte (die Android 4.3, 4.3, 4.4 und neuere Versionen enthalten) betrieben. Ich kann sagen, weil der Testläufer zeigt, dass der Test erfolgreich ausgeführt wurde, und die Ausgabe der folgenden Protokollmeldung Log.v("kiwixTesting", "Running zimTest() on Android version: " + Build.VERSION.SDK_INT); erscheint im Protokoll.

Der vollständige Code ist here und ich bin die Verfolgung der Arbeit here

jemand einen besseren Ansatz als meine vorschlagen Kann bitte? Vielen Dank.

+0

Jemand schrieb eine Antwort, die kurz darauf verschwand, mit einem Link zu https://StackOverflow.com/questions/17654249/ignoring-android-unit-tests-depending-on-sdk-level/17654337#17654337 Ich habe implementiert eine Version dieser benutzerdefinierten Anmerkung und es hat gut funktioniert. Die angenommene Antwort (mit @SdkSuppress) war jedoch sauberer und kürzer, daher verwarf ich meine benutzerdefinierte Annotation, um stattdessen @SdkSuppress zu verwenden. – JulianHarty

Antwort

1

Vielleicht möchten Sie einen Blick auf SdkSuppress Annotation werfen. Es hat zwei Methoden - maxSdkVersion und minSdkVersion, die Sie je nach Bedarf verwenden können.

+0

Vielen Dank, es ist so einfach wie das Hinzufügen von '@SdkSuppress (minSdkVersion = Build.VERSION_CODES.KITKAT)' – JulianHarty

Verwandte Themen