2017-08-24 27 views
1

我發現一個測試,特別是在預先KitKat設備上一直失敗。我相信這與更老的Android設備上使用的嵌入式WebView的變化有關(但也許這是錯誤的)。無論如何,回到我的問題:我想要一個優雅的方式來控制是否運行測試,具體取決於設備上運行的Android版本。我們如何才能自動只在較新的Android版本上運行測試?

目前,如果運行時早於KitKat,我會使用短路測試並傳遞測試的代碼。下面是相關的代碼:

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

我一直以來依次嘗試使用兩個註解:@TargetApi@RequiresApi例如

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

在這兩種情況下,測試都在我的測試設備(包括Android 4.3,4.3,4.4和更新版本)上運行。我可以告訴,因爲測試運行程序顯示測試已成功運行,並且日誌中會顯示以下日誌消息 Log.v("kiwixTesting", "Running zimTest() on Android version: " + Build.VERSION.SDK_INT);的輸出。

完整的代碼here,我到跟蹤工作here

任何人都可以提出一個更好的辦法比我好嗎?謝謝。

+0

有人發佈了一個答案,不久後消失了,帶有一個鏈接https://stackoverflow.com/questions/17654249/ignoring-android-unit-tests-depending-on-sdk-level/17654337#17654337我沒有實現這個自定義註釋的一個版本,它運行良好。然而,接受的答案(使用@SdkSuppress)更乾淨,更短,因此我將自定義註釋廢棄爲使用@SdkSuppress。 – JulianHarty

回答

1

您可能想看看SdkSuppress 註釋。它有兩種方法 - maxSdkVersion和minSdkVersion,您可以根據需要使用它們。

+0

謝謝,就像添加@SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)一樣簡單' – JulianHarty

相關問題