AMS追踪笔记(二)--ActivityMonitor与InstrumentationTestCase

ActivityMonitor类是Google为了InstrumentationTest而加入的一个工具类。

当前Instrumentation可以通过addMonitor去添加,被添加后,当一个新Activity创建,ActivityMonitor就会被检查,如果匹配,它的点击次数(getHits)就会被更新。如果调用结束,一个结果(ActivityResult)就会被回传。

ActivityMonitor也可以通过waitForActivity用来等待Activity的创建成功,将会返回一个匹配Activity的对象。

光讲理论太枯燥了,我们来写一个demo演示下ActivityMonitor的作用吧。

InstrumentationTestCases虽然已经被谷歌标记为@Deprecate,但是还是有很多历史遗留下来的测试工具大量使用的,最典型的大概就是CTS测试了。CTS测试一般手机厂商会关注多一点,简单来说就是兼容性测试。有兴趣同学可以访问官网了解下

CTS官网

这个Demo测试从MainActivity跳转到SecondActivity,确认SecondActivity中的TextView显示的字符串是否符合预期,代码如下。

public class InstrumentationDemoTest extends InstrumentationTestCase {
    Instrumentation mInstrumentation;
    MainActivity mMainActivity;
    private Instrumentation.ActivityMonitor mMonitor;

    public InstrumentationDemoTest() {
    }
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mInstrumentation = getInstrumentation();
        Intent intent = new Intent();
        intent.setClassName("com.syuunami.amsdemo", "com.syuunami.amsdemo.MainActivity");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mMainActivity = (MainActivity) mInstrumentation.startActivitySync(intent);//启动MainActivity
        mMonitor = new Instrumentation.ActivityMonitor("com.syuunami.amsdemo.SecondActivity",null,false);
        mInstrumentation.addMonitor(mMonitor);//添加Monitor
    }

    @Override
    protected void tearDown() throws Exception {
        Thread.sleep(2000);
        super.tearDown();
    }
    public void testSecondActivity() {
        mMainActivity.gotoSecond();//启动SecondActivity
        Activity secondActivity =mMonitor.waitForActivity();
        TextView tvshow = secondActivity.findViewById(R.id.tv_show2);
        assertEquals("not equals", "Hello!",tvshow.getText().toString());
    }
}

此处我们使用的就是ActivityMonitor去监听SecondActivity是否创建成功,并且获取已经创建好的对象,进而对SecondActivity的控件属性做判断。

对了,对Instrumentation不了解的同学,请注意这个测试代码是放在(androidTest)这个文件夹里的哦,另外第一次执行测试的时候请用右键测试文件,点击Run InstrumentationDemoTest 或者直接Ctrl Shift F10.


我在看源码的时候产生了一个疑惑:ActivityMonitor的其中一个构造函数是public ActivityMonitor(IntentFilter which, ActivityResult result, boolean block) {},如果有多个Activity匹配which,那么此时Monitor会监听所有的Activity吗

为此我给上面的demo做了修改:

1.为两个Activity都添加了action为"a.b.c"的IntentFilter.

2.给mInstrumentation添加构造器参数为(intentfilter,null,false)的ActivityMonitor mMonitor2.

测试发现,即使调用了MainAcitivity的gotoSecond方法,mMonitor2的getHits()返回值还是0.仔细一想,应该是gotoSecond方法还是使用了显示Intent启动有关,改为隐式启动后,发现无论测试过程中弹出的选框选择哪个Activity,getHits()都会返回1。

由此得出结论,此时Monitor会监听所有匹配的Activity.

另外突然想到,如果给Intrumentation的startActivitySync()方法传入一个隐式Intent会怎样。结果:

java.lang.RuntimeException: 
Intent in process com.syuunami.amsdemo resolved to different process system:ui: Intent { act=a.b.c flg=0x14000000 }

看该方法的源码,有段注释如下:

In addition, if the given Intent resolves to multiple activities, instead of displaying a dialog for the user to select an 
activity, an exception will be thrown.

好吧。

可能大家对这篇提到的Instrumentation还不熟悉,下篇我们探讨下它的源码。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ams-server-2022-07-21.rar 是一个文件的名称。这个文件是一个压缩包,文件格式为.rar。根据文件名可以推测,这个文件是关于"ams-server"的,日期为2022年7月21日。 "ams-server"代表了一个可能是"Attendance Management System Server"(考勤管理系统服务器)的缩写。这个服务器可能是一个用于管理和处理考勤系统数据的应用程序。 通过这个压缩包,我们可以猜测其中包含了与该考勤管理系统服务器相关的文件和数据。可能会有服务器的配置文件、源代码、数据库备份文件或其他相关的文档和资料。 如果需要使用这个压缩包,首先需要将其解压缩。通常情况下,我们可以使用压缩软件(比如WinRAR、7-Zip等)来解压缩RAR文件。在解压缩之后,我们可以查看其中的内容,并按照需求进行相应的操作。 总而言之, "ams-server-2022-07-21.rar"是一个压缩文件,可能包含了与考勤管理系统服务器相关的文件和数据。不同的应用场景可能需要不同的操作和处理。 ### 回答2: ams-server-2022-07-21.rar是一个文件的名称。根据名称可以猜测它是一个压缩文件,并且可能与ams服务器的某个版本或日期相关。根据“-2022-07-21”的部分,可以猜测这个压缩文件可能是为2022年7月21日的ams服务器版本制作的。 根据常见的命名规则,"ams-server"可能是指ams服务器的名称或缩写。服务器是一种计算机程序,用于提供服务、管理资源和处理请求。ams可能是一个特定的项目、软件或系统。压缩文件通常用于将多个文件或文件夹压缩成一个单独的文件,以便在网络上传输或存储时占用更少的空间。 因此,ams-server-2022-07-21.rar可能是一个存档了该日期的ams服务器相关文件的压缩文件。使用解压缩软件可以将压缩文件解压缩,以获得存档内的所有文件和文件夹。解压后的文件可能包含ams服务器的程序、配置文件、日志文件或其他与服务器操作相关的文件。 需要注意的是,这只是对文件名称的推测,实际内容可能有所不同。要确切了解ams-server-2022-07-21.rar文件的内容和用途,需要进一步查看文件、文档或与文件相关的信息。 ### 回答3: ams-server-2022-07-21.rar 是一个压缩文件,扩展名为.rar。根据名称可以推测,这个文件可能是一个AMS服务器的软件包,版本为2022年7月21日。rar 是一种流行的压缩格式,通常用于将多个文件或文件夹打包成一个单独的文件。通过解压缩该文件,我们可以获得其中的内容。 解压缩过程首先需要一个解压软件,如WinRAR或7-Zip等。我们可以将ams-server-2022-07-21.rar 文件拖放到解压软件的窗口中,或者使用软件的解压缩功能。解压缩后会生成一个或多个文件和文件夹,这些文件和文件夹可能包含了AMS服务器的程序文件、配置文件、文档等。 根据文件名中的日期,可以判断这个软件包是在2022年7月21日创建的。这可能表示该版本的AMS服务器在该日期之前是最新的,提供了一些新功能、修复或改进。用户可以下载和安装这个软件包,以使用其中提供的更新功能,或者修复现有版本的问题。 总之,ams-server-2022-07-21.rar 是一个AMS服务器的压缩软件包,文件名反映了其创建日期。通过解压缩该文件,我们可以访问其中的内容,并使用其中的文件来更新或改进现有的AMS服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值