2017-07-06 118 views
0

我有一個Android儀器測試,用於測試我的ServerApi和多個其他測試設備,我的活動。儀器測試:將測試定義爲以下強制測試

ServerApi測試可能失敗的原因之一是(可惜)是一個壞的無線網絡。在這種情況下,我的整個測試套件需要很長時間才能完成,因爲處理網絡訪問的所有活動都必須在發生故障之前超時。

如何定義ServerApiTest在一開始運行,如果失敗,取消所有其他測試?

public class ServerApiTest extends ApplicationTestCase<Application> { 
    //... 

    public ServerApiTest() { 
     super(Application.class); 
    } 

    @Override 
    public void setUp() throws Exception { 
     Log.i(TAG, SERVER_KEYWORD + ": prepare"); 
     super.setUp(); 
     _context = getContext(); 
    } 

    @Override 
    public void tearDown() throws Exception { 
     Log.i(TAG, SERVER_KEYWORD + ": cleanUp"); 
     super.tearDown(); 
    } 

    public void testPing() throws InterruptedException, ExecutionException, 
            URISyntaxException { 
     //... 
    } 

作爲一個例子的活性試驗中的一個的摘錄:

@RunWith(AndroidJUnit4.class) 
@MediumTest 
public class RecordingActivityTest { 
    private static final String TAG = RecordingActivityTest.class.getSimpleName(); 

    @Rule 
    public ActivityTestRule<RecordingActivity> _activityRule 
     = new ActivityTestRule<>(RecordingActivity.class); 


    @Test 
    public void testOnCreate() { 
     onView(withId(R.id.lytRecordingButtons)).check(
       matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))); 
    } 
    //... 

有趣的是,我在測試報告人已經觀察到,在某些(稀有和尚待說明)的場合,如果一些測試失敗,測試套件確實似乎中止。

查看屏幕截圖:RecordingActivityTest失敗,測試次數報告爲25.但在測試中沒有任何更改(只修復導致RecordingActivityTest失敗的錯誤),下一個版本再次正確顯示所有43個測試 - 巧合的是現在由於WiFi損壞而導致測試失敗。

首次試運行不指望所有的測試: First test run which does not count all tests 下面的測試運行,再次顯示了所有測試: Following test run which shows all tests again

無論引起了不被執行的測試,我可以利用這一機制爲了我想要達到的目標?

回答

1

如果運行測試需要穩定的Wifi,並且您希望跳過運行它們,您可以實現自定義TestRule,在該規則中的自定義語句中執行Wifi檢查。在該聲明的評估方法中,您隨後致電Assume.assumeTrue("Skip test due to poor Wifi connection", methodThatReturnsTrueIfWifiIsUp())。然後,您可以將此規則添加到需要Wifi的每個測試類中,並且如果網絡查找需要很長時間才能完成,並且您不希望爲每個測試類執行此操作,則可能會存儲靜態連接狀態。

+0

這樣可能會好,但測試報告很難理解,因爲很多測試都失敗了,而且我們必須推斷這些都是基於相同的原因(通過深入研究報告)。如果只有一個測試會失敗並停止執行以下操作,這將立即清除 – PhilLab

+0

@PhilLab在這種情況下可能會有所幫助https://stackoverflow.com/questions/10036894/stopping-junit-suite-if-particular - 試驗 - 失敗。 – fejd