2014-11-25 62 views
5

Robolectric允許使用shadowOf(activity).peekNextStartedActivity()測試已啓動Activity。但是,如果ActivityFLAG_ACTIVITY_CLEAR_TOP開始,此方法似乎不起作用。這很直觀,因爲這個標誌的目的不是開始一個新的Activity,而是將現有的Activity放回前面。有什麼方法可以測試這種情況嗎?測試FLAG_ACTIVITY_CLEAR_TOP的活動已啓動

UPDATE

我的測試環境如下:

有涉及3個活動,讓我們稱他們爲A,測試B和C.活動是B,這是由A,B開始現在開始C作爲結果,並且當收到結果時使用FLAG_ACTIVITY_CLEAR_TOP標誌返回到A.儘管當時堆棧中沒有活動A,但我預計它會啓動並通過peekNextStartedActivity()提供。

回答

2

每當從活動(例如)發送的意圖,則可以使用組標誌方法:

Intent i = new Intent(MyActivity.this, SomeActivity.class); 
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | SOME_OTHER_FLAGS...); 
startActivity(i); 

上導致活動(在本例中SomeActivity),可以使用getIntent方法:

getIntent().getFlags() 

所以真正的問題是:如何將標誌分割回其基本成分(按位OR)根據這篇文章的

http://code.tutsplus.com/articles/understanding-bitwise-operators--active-11301

簡單地檢查標誌與組件需要

if ((getIntent().getFlags() & FLAG_ACTIVITY_CLEAR_TOP) != 0) 
{ 
    // do something here 
} 
+0

在我的情況下,即使檢查Activity已經通過檢查它的ComponentName開始,我也會很高興,但是,如果我使用FLAG_ACTIVITY_CLEAR_TOP啓動它,peekNextStartedActivity()不會返回正確的Activity。 – Egor 2014-11-27 10:57:17

0

我試着測試:

private void checkMainActivityIsStarted() 
{ 
    activity.showMainActivity(); 

    Intent intent = shadowOf(activity).getNextStartedActivity(); 
    assertThat(intent).hasComponent(Robolectric.application, MainActivity.class); 
    assertThat(intent.getFlags()).isEqualTo(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
} 

在接下來的代碼:

public void showMainActivity() 
{ 
    Intent intent = new Intent(this, MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
} 

它是否適合你?

UPDATE

至於我,你應該本次測試分爲兩個:當你打電話onActivityResult

  1. 活動C被返回正確的結果代碼
  2. 活動B(它是公共的方法)火災活動A

對於我來說,測試Android傳遞意圖是沒有意義的活動。如果我理解錯誤,請糾正我。

+0

在我的場景中,我在onActivityResult()中引發了這種Intent,處理由另一個Activity發送的結果(我們稱之爲A)。在測試中,我啓動活動A,接收它的結果並查看它是否觸發了FLAG_ACTIVITY_CLEAR_TOP意圖。然而,peekNextStartedActivity()(和getNextStartedActivity()也)給我的意圖到活動答: – Egor 2014-11-27 17:50:46

+0

我將它分成兩個測試 – 2014-11-28 08:25:20

+0

是的,但AFAIK它是唯一的方式來測試onActivityResult() – Egor 2014-11-28 08:28:07

0

它明確地解決你的問題。

Intent i = new Intent(MyActivity.this, SomeActivity.class); 
    i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | SOME_OTHER_FLAGS...); 
    startActivity(i); 

,但如果你能意圖時的B完成當前的活動℃,當它顯示的結果,完成C的活性,其高清需要你在屏幕上。