簡體   English   中英

為什么沒有在 Android 儀器測試(活動測試)中使用濃縮咖啡啟動活動?

[英]Why is activity not launching in Android Instrumentation test (Activity Test) with espresso?

我的測試 class:

@RunWith(AndroidJUnit4.class)
    public class MainActivityTest {
    
        @Rule
        public ActivityScenarioRule<MainActivity> rule = new  ActivityScenarioRule<>(MainActivity.class);
        ActivityScenario<MainActivity> scenario;
    
        Context context = ApplicationProvider.getApplicationContext();
    
        @Before
        public void launchActivity() {
            scenario = ActivityScenario.launch(MainActivity.class);
            scenario.moveToState(Lifecycle.State.CREATED);
        }
    
        @Test
        public void sendLocationButton_clicked_activateLongClickToastAppear() {
            onView(withId(R.id.location_button)).perform(click());
            onView(withText("Long press it")).inRoot(withDecorView(not(is(getActivity(context).getWindow().getDecorView())))).check(matches(isDisplayed()));
        }
        
    
        @After
        public void tearDown() throws Exception {
            scenario.close();
        }
    }

錯誤:

java.lang.AssertionError: Activity never becomes requested state "[DESTROYED, RESUMED, CREATED, STARTED]" (last lifecycle transition = "PRE_ON_CREATE")
    at androidx.test.core.app.ActivityScenario.waitForActivityToBecomeAnyOf(ActivityScenario.java:338)
    at androidx.test.core.app.ActivityScenario.launchInternal(ActivityScenario.java:272)
    at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:195)
    at androidx.test.ext.junit.rules.ActivityScenarioRule.lambda$new$0$ActivityScenarioRule(ActivityScenarioRule.java:70)
    at androidx.test.ext.junit.rules.ActivityScenarioRule$$Lambda$0.get(Unknown Source:2)
    at androidx.test.ext.junit.rules.ActivityScenarioRule.before(ActivityScenarioRule.java:103)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

這只是錯誤的一部分,因為堆棧溢出會拒絕如此龐大的有問題的代碼。

我只想測試按鈕單擊時是否出現 Toast。 不知道發生了什么。 請幫忙。 提前致謝。

發生這種情況可能是因為 Android 試圖兩次初始化此活動。 您可以使用ActivityTestRule啟動活動並自行管理,也可以使用ActivityScenario.launch自己進行。 我建議在您的情況下使用ActivityTestRule

文檔: https://developer.android.com/reference/androidx/test/ext/junit/rules/ActivityScenarioRule

這可能是我最近遇到的同一個問題。

嘗試添加

debugImplementation "androidx.test:core:1.3.0"

使用您正在使用的核心版本到應用程序級別的 gradle.build 文件。

此外,您不需要同時使用 ActivityScenarioRule 和 ActivityScenario。 選擇適合您需求的那一款。

ActivityScenarioRule類似於 ActivityTestRule。 它只會在測試之前啟動活動(它在內部調用 ActivityScenario 來啟動活動)。

ActivityScenario為您提供更多控制,因為它允許您在測試期間啟動活動,甚至在測試期間切換活動。

使用 ActivityScenarioRule,您不需要像以前一樣投射啟動,因為該規則已經為您投射了它。 在測試運行后也可以關閉。 只需刪除之前和之后的規則,測試應該可以正常工作。 如果您需要此庫,請從活動中獲取一些信息。 您可以使用 ApplicationProvider.getApplicationContext 創建一個 Context 實例,然后您可以像之前在 onActivity 上一樣使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM