Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅在满足特定条件时测试新活动的UI?_Java_Android_Testing_Android Intent_Android Espresso - Fatal编程技术网

Java 如何仅在满足特定条件时测试新活动的UI?

Java 如何仅在满足特定条件时测试新活动的UI?,java,android,testing,android-intent,android-espresso,Java,Android,Testing,Android Intent,Android Espresso,假设我有一个带有输入字段和按钮的应用程序。当用户输入正确的数字并按下按钮时,我会创建一个新的活动。如何使用浓缩咖啡测试是否激发了正确的意图,以及新活动中的所有内容是否到位?我知道您有一个EditText和一个按钮,当用户单击按钮时,您将启动一个新活动,只要编辑文本中的文本与特定文本相等 下面是一个完整的工作代码和解释: activity_home.xml 假设同时具有按钮和编辑文本的活动是HomeActivity 按如下方式创建其布局: <?xml version="1.0" encodi

假设我有一个带有输入字段和按钮的应用程序。当用户输入正确的数字并按下按钮时,我会创建一个新的活动。如何使用浓缩咖啡测试是否激发了正确的意图,以及新活动中的所有内容是否到位?

我知道您有一个EditText和一个按钮,当用户单击按钮时,您将启动一个新活动,只要编辑文本中的文本与特定文本相等

下面是一个完整的工作代码和解释:

activity_home.xml 假设同时具有按钮和编辑文本的活动是HomeActivity

按如下方式创建其布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_home"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go" />
</LinearLayout>
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class HomeActivity extends AppCompatActivity {
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        editText = (EditText)findViewById(R.id.edit_text);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String text = editText.getText().toString();
                if (text.equals("1")) {
                    Intent intent = new Intent(HomeActivity.this, ThirdActivity.class);
                    startActivity(intent);
                }
            }
        });
    }
}
注意,我在这里只是检查文本是否等于1,然后我开始一个新的活动,我称之为ThirdActivity

HomeActivityText.java 在androidTest文件夹中创建名为HomeActivityText的类

import android.app.Activity;
import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.Espresso;
import android.support.test.espresso.action.ViewActions;
import android.support.test.espresso.matcher.ViewMatchers;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
import android.support.test.runner.lifecycle.Stage;

import junit.framework.Assert;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.Collection;

@RunWith(AndroidJUnit4.class)
public class HomeActivityTest {
    @Rule
    public ActivityTestRule<HomeActivity> mActivityRule =
            new ActivityTestRule<>(HomeActivity.class);

    @Test
    public void testHappyScenario() {
        Espresso.onView(ViewMatchers.withId(R.id.edit_text)).perform(ViewActions.typeText("1"));
        Espresso.onView(ViewMatchers.withId(R.id.button)).perform(ViewActions.click());
        Assert.assertEquals(getActivityInstance().getClass(), ThirdActivity.class);
    }

    private Activity getActivityInstance() {
        final Activity[] currentActivity = {null};
        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
            public void run() {
                Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
                if (resumedActivities.iterator().hasNext()) {
                    currentActivity[0] = (Activity) resumedActivities.iterator().next();
                }
            }
        });

        return currentActivity[0];
    }

}
导入android.app.Activity;
导入android.support.test.InstrumentationRegistry;
导入android.support.test.espresso.espresso;
导入android.support.test.espresso.action.ViewActions;
导入android.support.test.espresso.matcher.ViewMatchers;
导入android.support.test.rule.ActivityTestRule;
导入android.support.test.runner.AndroidJUnit4;
导入android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
导入android.support.test.runner.lifecycle.Stage;
导入junit.framework.Assert;
导入org.junit.Rule;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入java.util.Collection;
@RunWith(AndroidJUnit4.class)
公共类家庭活动测试{
@统治
公共活动测试规则mActivityRule=
新的ActivityTestRule(HomeActivity.class);
@试验
公共无效测试快乐场景(){
浓缩咖啡.onView(viewmachers.withId(R.id.edit_text)).perform(ViewActions.typeText(“1”));
Espresso.onView(ViewMatchers.withId(R.id.button)).perform(ViewActions.click());
Assert.assertEquals(getActivityInstance().getClass(),ThirdActivity.class);
}
私有活动getActivityInstance(){
最终活动[]currentActivity={null};
InstrumentationRegistry.getInstrumentation().runOnMainSync(新的Runnable()){
公开募捐{
集合resumedActivities=ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
if(resumedActivities.iterator().hasNext()){
currentActivity[0]=(Activity)resumedActivities.iterator().next();
}
}
});
返回当前活动[0];
}
}
当您输入1作为编辑文本的值时,测试将通过,否则将失败

单元测试的代码模拟了快乐场景,在该场景中,您将值1设置为编辑文本,然后单击按钮,然后检查新活动是否已启动

请注意,我开发了一个函数来检索设备中显示的最后一个活动,并将其类与预期的第三个活动类进行比较


如果有不清楚的地方,请告诉我好吗?

我知道您有一个EditText和一个按钮,当用户单击按钮时,您将启动一个新的活动,只要编辑文本中的文本等于特定文本

下面是一个完整的工作代码和解释:

activity_home.xml 假设同时具有按钮和编辑文本的活动是HomeActivity

按如下方式创建其布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_home"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go" />
</LinearLayout>
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class HomeActivity extends AppCompatActivity {
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        editText = (EditText)findViewById(R.id.edit_text);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String text = editText.getText().toString();
                if (text.equals("1")) {
                    Intent intent = new Intent(HomeActivity.this, ThirdActivity.class);
                    startActivity(intent);
                }
            }
        });
    }
}
注意,我在这里只是检查文本是否等于1,然后我开始一个新的活动,我称之为ThirdActivity

HomeActivityText.java 在androidTest文件夹中创建名为HomeActivityText的类

import android.app.Activity;
import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.Espresso;
import android.support.test.espresso.action.ViewActions;
import android.support.test.espresso.matcher.ViewMatchers;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
import android.support.test.runner.lifecycle.Stage;

import junit.framework.Assert;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.Collection;

@RunWith(AndroidJUnit4.class)
public class HomeActivityTest {
    @Rule
    public ActivityTestRule<HomeActivity> mActivityRule =
            new ActivityTestRule<>(HomeActivity.class);

    @Test
    public void testHappyScenario() {
        Espresso.onView(ViewMatchers.withId(R.id.edit_text)).perform(ViewActions.typeText("1"));
        Espresso.onView(ViewMatchers.withId(R.id.button)).perform(ViewActions.click());
        Assert.assertEquals(getActivityInstance().getClass(), ThirdActivity.class);
    }

    private Activity getActivityInstance() {
        final Activity[] currentActivity = {null};
        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
            public void run() {
                Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
                if (resumedActivities.iterator().hasNext()) {
                    currentActivity[0] = (Activity) resumedActivities.iterator().next();
                }
            }
        });

        return currentActivity[0];
    }

}
导入android.app.Activity;
导入android.support.test.InstrumentationRegistry;
导入android.support.test.espresso.espresso;
导入android.support.test.espresso.action.ViewActions;
导入android.support.test.espresso.matcher.ViewMatchers;
导入android.support.test.rule.ActivityTestRule;
导入android.support.test.runner.AndroidJUnit4;
导入android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
导入android.support.test.runner.lifecycle.Stage;
导入junit.framework.Assert;
导入org.junit.Rule;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入java.util.Collection;
@RunWith(AndroidJUnit4.class)
公共类家庭活动测试{
@统治
公共活动测试规则mActivityRule=
新的ActivityTestRule(HomeActivity.class);
@试验
公共无效测试快乐场景(){
浓缩咖啡.onView(viewmachers.withId(R.id.edit_text)).perform(ViewActions.typeText(“1”));
Espresso.onView(ViewMatchers.withId(R.id.button)).perform(ViewActions.click());
Assert.assertEquals(getActivityInstance().getClass(),ThirdActivity.class);
}
私有活动getActivityInstance(){
最终活动[]currentActivity={null};
InstrumentationRegistry.getInstrumentation().runOnMainSync(新的Runnable()){
公开募捐{
集合resumedActivities=ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
if(resumedActivities.iterator().hasNext()){
currentActivity[0]=(Activity)resumedActivities.iterator().next();
}
}
});
返回当前活动[0];
}
}
当您输入1作为编辑文本的值时,测试将通过,否则将失败

单元测试的代码模拟了快乐场景,在该场景中,您将值1设置为编辑文本,然后单击按钮,然后检查新活动是否已启动

请注意,我开发了一个函数来检索设备中显示的最后一个活动,并比较I