启动活动进行测试

t0s*_*t0s 23 android android-testing android-espresso

我有一个使用Realm db的测验应用程序.每次用户选择答案时,她都会单击一个按钮,并显示问题的新文本.多数民众赞成,直到她到达我开始新活动的最后,并根据正确答案显示分数.

我应该如何开始/测试(使用Espresso我猜)该活动,而不必每次所有答案手动输入并在每次回答后点击按钮,直到我到达最后一个?

我需要的是将一些模拟数据传递给变量并制作一个Intent,但我不知道如何在Espresso中找不到与此相关的任何内容

chi*_*uki 54

您可以使用以下自定义意图启动下一个活动:

@RunWith(AndroidJUnit4.class)
public class NextActivityTest {

  @Rule
  public ActivityTestRule<NextActivity> activityRule 
     = new ActivityTestRule<>(
        NextActivity.class,
        true,     // initialTouchMode
        false);   // launchActivity. False to customize the intent

  @Test
  public void intent() {
    Intent intent = new Intent();
    intent.putExtra("your_key", "your_value");

    activityRule.launchActivity(intent);

    // Continue with your test
  }
}
Run Code Online (Sandbox Code Playgroud)

完整示例:https://github.com/chiuki/android-test-demo

博客文章:http://blog.sqisland.com/2015/04/espresso-21-activitytestrule.html


dev*_*jay 5

对于使用 AndroidX 进行测试的开发人员来说,情况有所改变。

这是一个示例 UI 测试用例,用于测试单击 textview 后我的预期活动是否打开。

import androidx.lifecycle.Lifecycle
import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.Intents.intended
import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
import androidx.test.espresso.matcher.ViewMatchers.withId
import com.softway.dhananjay.tournamentapp.tournament.TournamentActivity
import org.junit.Test

class MainActivityTest {

    @Test
    fun tournament_activity_starts_onClick_of_textView() {

        Intents.init()

        val activityScenario: ActivityScenario<MainActivity> =
            ActivityScenario.launch(MainActivity::class.java)


        activityScenario.moveToState(Lifecycle.State.RESUMED)

        onView(withId(R.id.startTextView)).perform(ViewActions.click())

        intended(hasComponent(TournamentActivity::class.java.name))

        Intents.release()

        activityScenario.moveToState(Lifecycle.State.DESTROYED)

    }
}
Run Code Online (Sandbox Code Playgroud)


Abh*_*oni 1

首先,看到这个问题:Android Monkey Runner

然后你可以看到这些指南:Monkey Runner

它使您可以使用Python 在源代码之外测试您的android 活动。因此,您可以触发事件并进行特定的活动,如下所示:

#! /usr/bin/env monkeyrunner

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
from random import randint

print "get device"
device = MonkeyRunner.waitForConnection()
package = 'my.packaget'
activity = 'my.package.activity'
runComponent = package + '/' + activity
device.startActivity(component=runComponent)

#use commands like device.touch and device.drag to simulate a navigation and open my activity

#with your activity opened start your monkey test
print "start monkey test"
for i in range(1, 1000):
    #here i go emulate only simple touchs, but i can emulate swiper keyevents and more... :D
    device.touch(randint(0, 1000), randint(0, 800), 'DOWN_AND_UP')

print "end monkey test"
Run Code Online (Sandbox Code Playgroud)

保存然后运行:monkeyrunner test.py