📜  Espresso测试框架-体系结构

📅  最后修改于: 2020-12-06 09:33:00             🧑  作者: Mango


在本章中,让我们学习浓缩咖啡测试框架的术语,如何编写简单的浓缩咖啡测试用例以及浓缩咖啡测试框架的完整工作流程或体系结构。

总览

Espresso提供了大量的类来测试用户界面和android应用程序的用户交互。它们可以分为以下五类-

JUnit运行器

Android测试框架提供了一个运行器AndroidJUnitRunner来运行以JUnit3和JUnit4样式的测试用例编写的espresso测试用例。它特定于android应用程序,并且透明地处理在实际设备或仿真器中加载espresso测试用例和被测应用程序,执行测试用例并报告测试用例的结果。要在测试案例中使用AndroidJUnitRunner,我们需要使用@RunWith批注对测试类进行批注,然后按如下所示传递AndroidJUnitRunner参数-

@RunWith(AndroidJUnit4.class)
   public class ExampleInstrumentedTest {
}

JUnit规则

Android测试框架提供了ActivityTestRule规则,以在执行测试用例之前启动android活动。它在每个用@ Test`和@Before注释的方法之前启动活动。在使用@After注释的方法之后,它将终止活动。示例代码如下,

@Rule
public ActivityTestRule mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

在这里, MainActivity是在运行测试用例之前要启动的活动,在运行特定测试用例之后要销毁的活动。

ViewMatchers

Espresso提供了大量视图匹配器类(位于androidx.test.espresso.matcher.ViewMatchers包中),以在android活动屏幕的视图层次结构中匹配和查找UI元素/视图。 Espresso的方法onView带有Matcher类型的单个参数(视图匹配器),找到相应的UI视图并返回相应的ViewInteraction对象。由onView方法返回的ViewInteraction对象可以进一步用于调用诸如在匹配的视图上单击之类的操作,也可以用于断言匹配的视图。查找带有文本“ Hello World!”的视图的示例代码如下

ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));

在这里, withText是一个匹配器,可用于匹配具有文本“ Hello World!”的UI视图。

ViewActions

Espresso提供了大量视图操作类(在androidx.test.espresso.action.ViewActions中),以在选定/匹配的视图上调用不同的操作。一旦onView匹配并返回ViewInteraction对象,则可以通过调用ViewInteraction对象的“ perform”方法来调用任何动作,并将其传递给适当的view动作。单击匹配视图的示例代码如下,

ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.perform(click());

在此,将调用匹配视图的点击动作。

查看断言

与视图匹配器和视图操作类似,Espresso提供了大量视图断言(在androidx.test.espresso.assertion.ViewAssertions包中)来断言匹配的视图是我们期望的。一旦onView匹配并返回ViewInteraction对象,就可以使用ViewInteraction的check方法通过将其与适当的视图断言一起传递来检查任何断言。声明匹配视图如下的示例代码,

ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.check(matches(withId(R.id.text_view)));

在这里,匹配项接受视图匹配器并返回视图断言,可以通过ViewInteraction的check方法进行检查。

Espresso测试框架的工作流程

让我们了解espresso测试框架的工作原理,以及它如何提供以简单灵活的方式进行任何类型的用户交互的选项。浓缩咖啡测试用例的工作流程如下所述,

  • 正如我们之前所了解的,Android JUnit运行器, AndroidJUnit4将运行android测试用例。 espresso测试用例需要用@RunWith(AndroidJUnut.class)标记。首先, AndroidJUnit4将准备运行测试用例的环境。它会启动连接的android设备或模拟器,安装应用程序并确保要测试的应用程序处于就绪状态。它将运行测试用例并报告结果。

  • Espresso至少需要一个ActivityTypeRule类型的JUnit规则来指定活动。 Android JUnit运行程序将启动要使用ActivityTestRule启动的活动

  • 每个测试用例至少需要一个onViewonDate (用于查找基于数据的视图,如AdapterView )方法调用,以匹配并找到所需的视图。 onView或onData返回ViewInteraction对象。

  • 返回ViewInteraction对象后,我们可以调用选定视图的操作,也可以使用断言为该视图检查期望的视图。

  • 可以使用ViewInteraction对象的perform方法通过传递任何可用的视图动作来调用动作。

  • 可以使用ViewInteraction对象的check方法通过传递任何可用的视图断言来调用断言。

工作流程的图表表示如下,

工作流程

示例–视图断言

让我们编写一个简单的测试用例,以查找具有“ Hello World!”的文本视图。在“ HelloWorldApp”应用程序中输入文本,然后使用视图断言来断言。完整的代码如下,

package com.tutorialspoint.espressosamples.helloworldapp;

import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.withText;;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static org.junit.Assert.*;
/**
   * Instrumented test, which will execute on an Android device.
   *
   * @see Testing documentation
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
   @Rule
   public ActivityTestRule mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
   @Test
   public void view_isCorrect() {
      onView(withText("Hello World!")).check(matches(isDisplayed()));
   }
   @Test
   public void useAppContext() {
      // Context of the app under test.
      Context appContext = InstrumentationRegistry.getTargetContext();
      assertEquals("com.tutorialspoint.espressosamples.helloworldapp", appContext.getPackageName());
   }
}

在这里,我们使用了withText视图匹配器来查找具有“ Hello World!”的文本视图。文本并匹配视图断言以断言该文本视图已正确显示。在Android Studio中调用测试用例后,它将运行测试用例并报告成功消息,如下所示。

view_is正确的测试用例

测试用例