iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Android中利用Activity实现单元测试
  • 586
分享到

怎么在Android中利用Activity实现单元测试

androidactivity 2023-05-30 22:05:24 586人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关怎么在Android中利用Activity实现单元测试,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。对Acitivity的测试对于Activity,我们大致有两种测试需求

这期内容当中小编将会给大家带来有关怎么在Android中利用Activity实现单元测试,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

对Acitivity的测试

对于Activity,我们大致有两种测试需求:

在Activity正常启动后,查看界面布局是否正确,包括View的点击事件等是否正确。

需要在Activity启动前完成各种数据的部署,然后查看Activity的效果。

对于这两种需求,笔者分别做了两个示例解说:

检测一个布局中的button和TextView是否正确。

网络动态获取String到Activity界面显示,并且这个图片的URL是由Intent传递过来的。

环境部署

首先要导入expresso-core的包,如下:

dependencies {  // Other dependencies ...  androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'}

当然在目前的项目架构中一般已经自动导入了这个包,所以不需要自己导入,笔者项目中自动导入的包如下如下:

dependencies {  compile fileTree(include: ['*.jar'], dir: 'libs')  androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {    exclude group: 'com.android.support', module: 'support-annotations'  })  compile 'com.android.support:appcompat-v7:26.0.0-alpha1'  compile 'com.android.support.constraint:constraint-layout:1.0.2'  testCompile 'junit:junit:4.12'}

项目结构如下:

怎么在Android中利用Activity实现单元测试

布局View的测试:

package com.example.xujiajia_sx.myexpressotest;import android.app.Activity;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.View;import android.widget.Button;import android.widget.TextView;public class SimpleViewActivity extends Activity{  private TextView tv;  private Button btn;  @Override  protected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.act_simple_view);    initView();  }  private void initView() {    tv=findViewById(R.id.tv_simple_view);    btn=findViewById(R.id.btn_simple_view);    tv.setText("111");    btn.setText("222");    btn.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View view) {        tv.setText("777");      }    });  }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical">  <TextView    android:id="@+id/tv_simple_view"    android:layout_width="wrap_content"    android:layout_height="wrap_content"     />  <Button    android:id="@+id/btn_simple_view"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    /></LinearLayout>
package com.example.xujiajia_sx.myexpressotest;import android.support.test.rule.ActivityTestRule;import org.junit.Rule;import org.junit.Test;import static android.support.test.espresso.Espresso.onView;import static android.support.test.espresso.action.ViewActions.click;import static android.support.test.espresso.assertion.ViewAssertions.matches;import static android.support.test.espresso.matcher.ViewMatchers.withId;import static android.support.test.espresso.matcher.ViewMatchers.withText;public class SimpleViewTest {  @Rule  public ActivityTestRule<SimpleViewActivity> MactivityTestRule =      new ActivityTestRule<SimpleViewActivity>(SimpleViewActivity.class);  @Test  public void textViewTest() throws Exception {    onView(withId(R.id.tv_simple_view))        .check(matches(withText("111")));  }  @Test  public void buttonTest() throws Exception {    onView(withId(R.id.btn_simple_view))        .check(matches(withText("222")))        .perfORM(click());    onView(withId(R.id.tv_simple_view))        .check(matches(withText("777")));  }}

测试主要逻辑:

首先要使用ActivityTestRule初始化你要测试的Activity。

编写测试方法,测试View是否是我们预期的样子。

两个测试方法逻辑如下:

textViewTest():

在Activity中查找id为tv_simple_view的View,检查它的text是否为“111”。

buttonTest():

在Activity中查找id为btn_simple_view的View,检查它的text是否为“222”。然后执行点击事件,点击事件的逻辑是在Activity的OnCreate中设置的,是把TextView的text设置为777。在执行完点击事件后,测试方法中继续测试TextView的text是否为“777”。

读者可能阅读到对View的测试非常陌生,不用担心,此处主要要理解测试的逻辑即可,笔者会在下篇文章具体讲解View的各种测试方法。

网络获取String的Activity测试:

package com.example.xujiajia_sx.myexpressotest;import android.app.Activity;import android.os.Bundle;import android.support.annotation.Nullable;import android.widget.TextView;public class ActTestActivity extends Activity{  private TextView tv;  @Override  protected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.act_act_test);    initView();  }  private void initView() {    tv= findViewById(R.id.tv_act_test);    new Thread(new Runnable() {      @Override      public void run() {        String url =getIntent().getStringExtra("url");        final String s=mHttpClient.getInstance().get(url);        runOnUiThread(new Runnable() {          @Override          public void run() {            tv.setText(s);          }        });      }    }).start();  }}
package com.example.xujiajia_sx.myexpressotest;public class mHttpClient {  private static HttpURLConnectionClient mClient = null;  public static void setClient(HttpURLConnectionClient client) {    mClient = client;  }  public static HttpURLConnectionClient getInstance() {    return mClient;  }}
package com.example.xujiajia_sx.myexpressotest;import android.util.Log;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import static android.content.ContentValues.TAG;public class HttpURLConnectionClient {  public String get(String url) {    HttpURLConnection conn = null;    try {      URL mURL = new URL(url);      conn = (HttpURLConnection) mURL.openConnection();      conn.setRequestMethod("GET");      conn.setConnectTimeout(2000);      conn.connect();      InputStream is = conn.getInputStream();      StringBuilder sb = new StringBuilder();      BufferedReader reader = new BufferedReader(new InputStreamReader(is));      String line;      while ((line = reader.readLine()) != null) {        sb.append(line).append("\n");      }      reader.close();      return sb.toString();    } catch (IOException e) {      Log.e(TAG, "network error for mini program ", e);      return "";    } finally {      //最后将conn断开连接      if (conn != null) {        conn.disconnect();      }    }  }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical">  <TextView    android:id="@+id/tv_act_test"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    /></LinearLayout>
package com.example.xujiajia_sx.myexpressotest;import android.content.Intent;import android.support.test.rule.ActivityTestRule;import org.junit.Rule;import org.junit.Test;public class ActTest {  @Rule  public ActivityTestRule<ActTestActivity> mActivityTestRule=      new ActivityTestRule<ActTestActivity>(ActTestActivity.class){        @Override        protected Intent getActivityIntent() {          Intent intent=new Intent();          intent.putExtra("url","http://www.weather.com.cn/adat/sk/101310201.html");          return intent;        }        @Override        protected void befoReactivityLaunched() {          mHttpClient.setClient(new HttpURLConnectionClient());        }      };  @Test  public void mTest() throws Exception{    Thread.sleep(5000);  }}

网络获取不要忘记在AndroidManifest中加网络权限喔。

这个Activity的主要逻辑就是接收Intent,然后获取到传过来的url,接着通过网络获取到url的String,显示到TextView上。

主要测试逻辑:

首先还是要定义ActivityTestRule,确定使用哪个Activity。

与前一个例子不同的是,这里要重写ActivityTestRule的两个方法,getActivityIntent() 和beforeActivityLaunched()。顾名思义,一个是设置Activity获取到的Intent,另一个是设置Activity启动跟之前的准备工作。

笔者此处在getActivityIntent() 中设置了传递的url,在beforeActivityLaunched()设置的网络获取的方式。

有些读者可能会好奇为什么网络获取的方式不默认呢,而要通过setClient()来设置?

因为这样可以更方便我们测试,在正式的项目中,我们可能会需要在代码中加入log等操作,但是正式的代码一般我们是不会去修改的,但是我们可以继承它,重写某些方法,然后把它放到测试需要的地方。

在这里我们就可以继承HttpURLConnectionClient 这个类,然后把继承的子类使用setClient()来作为网络获取的方式。

上述就是小编为大家分享的怎么在Android中利用Activity实现单元测试了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎么在Android中利用Activity实现单元测试

本文链接: https://www.lsjlt.com/news/221595.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Android中利用Activity实现单元测试
    这期内容当中小编将会给大家带来有关怎么在Android中利用Activity实现单元测试,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。对Acitivity的测试对于Activity,我们大致有两种测试需求...
    99+
    2023-05-30
    android activity
  • android单元测试怎么实现
    Android单元测试可以通过使用JUnit框架和Android Testing Support Library来实现。以下是实现A...
    99+
    2023-08-29
    android
  • Vue中怎么利用case实现单元测试
    Vue中怎么利用case实现单元测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。测试关注点对于vue组件,单元测试测试主要关...
    99+
    2024-04-02
  • Spring Boot中怎么利用JUnit 5实现单元测试
    这篇文章给大家介绍Spring Boot中怎么利用JUnit 5实现单元测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 忽略测试用例执行JUnit 4:@Test  @Ignore ...
    99+
    2023-06-16
  • 怎么在Java中利用JUnit实现一个单元测试功能
    怎么在Java中利用JUnit实现一个单元测试功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。单元测试是编写测试代码,应该准确、快速地保证程序基本模块的正确性...
    99+
    2023-05-31
    java junit ava
  • Django中怎么实现单元测试
    在Django中,可以使用Django提供的TestCase类来编写单元测试。下面是一个示例: 创建一个测试类,并继承自djang...
    99+
    2024-03-06
    Django
  • Node.js中怎么实现单元测试
    Node.js中怎么实现单元测试,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为啥需要单元测试?所谓单元测试,就是对某个函数或者API进行正确性验证。来看个简单的例子add1....
    99+
    2023-06-17
  • 利用junit4怎么实现一个单元测试功能
    今天就跟大家聊聊有关利用junit4怎么实现一个单元测试功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Junit单元测试框架是Java程序开发必备的测试利器,现在最常用的就是Ju...
    99+
    2023-05-31
    junit4
  • Java中怎么实现单元测试与集成测试
    Java中怎么实现单元测试与集成测试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Maven测试代码结构的组织我们知道在Maven工程结构中“src/test”目录是专门用...
    99+
    2023-06-16
  • python中怎么实现unittest单元测试
    python中怎么实现unittest单元测试,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。说明导入unittest模块。导入被测对象。创建测试类unittest.TestCa...
    99+
    2023-06-20
  • GO中的单元测试怎么实现
    这篇“GO中的单元测试怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“GO中的单元测试怎么实现”文章吧。  ...
    99+
    2023-07-04
  • Hibernate单元测试怎么实现
    这篇文章主要介绍“Hibernate单元测试怎么实现”,在日常操作中,相信很多人在Hibernate单元测试怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate单元测试怎么实现”的疑惑有所...
    99+
    2023-06-17
  • 怎么在Android中利用Activity实现一个监听器
    怎么在Android中利用Activity实现一个监听器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Activity在Activity中,使用findViewById(int...
    99+
    2023-06-14
  • 怎么在Android中利用Activity实现跳转与传值
    今天就跟大家聊聊有关怎么在Android中利用Activity实现跳转与传值,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android Activity的跳转与传值详解Activi...
    99+
    2023-05-31
    android activity roi
  • SpringBoot+TestNG单元测试怎么实现
    这篇“SpringBoot+TestNG单元测试怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot+...
    99+
    2023-06-08
  • 怎么在SpringBoot中使用Mockito单元测试
    这期内容当中小编将会给大家带来有关怎么在SpringBoot中使用Mockito单元测试,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Mock 测试Mock 测试就是在测试过程中,创建一个假的对象,避免你...
    99+
    2023-06-15
  • Android中怎么利用Activity实现滑动返回
    这期内容当中小编将会给大家带来有关Android中怎么利用Activity实现滑动返回,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android 滑动返回Activity的实现代码package&nbs...
    99+
    2023-05-30
    android activity
  • 怎么在python中创建单元测试
    本篇内容主要讲解“怎么在python中创建单元测试”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在python中创建单元测试”吧!让我们先从为什么要做测试开始:1、减少手动测试的需求因为测试...
    99+
    2023-07-06
  • 怎么实现Python的add5()单元测试
    本篇内容介绍了“怎么实现Python的add5()单元测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TestAdd5类由unittest...
    99+
    2023-06-17
  • 怎么在java中利用ReentrantLock实现重入测试
    本篇文章给大家分享的是有关怎么在java中利用ReentrantLock实现重入测试,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的特点有哪些Java的特点有哪些1.J...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作