文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于Instrumentation的android单元测试实践

2022-06-06 12:52

关注

  android的单元测试主要采用instrumentation,instrumentation是执行application instrumentation的基类,它具有启动能力,用于监控其他类的工具类。本博文在一个简单android demo开发应用上,使用instrumentation类完成单元测试。   android demo   MainActivity(具体代码见后)   待测函数:   add():加法函数,不显示在ui上   sub():减法函数,不显示在ui上   changetextview():改变textview文字显示,通过监听button点击相应改变textview文本内容   multip():乘法函数,通过监听button点击相应,完成乘数和被乘数的获取,并将结果显示在ui控件上。   SampleTest(具体代码见后)   代码简单说明:   类继承:   sampleTest继承InstrumentationTestCase,作为监控的具体实现的定制类   public class sampleTest extends InstrumentationTestCase {   private MainActivity sample = null;   启动被测应用/被测类:   sampleTest继承InstrumentationTestCase,可以使用getInstrumentation()函数获取Instrumentation对象,通过Instrumentation的startActivitySync()函数启动一个Activity,直到Activity启动后返,其中intent设置被启动的Activity   Intent intent = new Intent();   intent.setClassName("com.example.jc.instrumentsample", MainActivity.class.getName());   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   sample = (MainActivity)getInstrumentation().startActivitySync(intent);   单元case的编写:   函数名:测试函数以test为key命名   函数逻辑:点击按钮,改变textview文本显示。具体细节:为了防止ui线程停顿/卡死,新建一个线程来完成测试行为,即PerFromClick(继承runnable),其中函数中的btn2.performClick函数为模拟ui上点击行为   验证:获取textview的文本,调用assertEquals来验证与期望是否一致   public void testActivity(){   Log.d("testActivity","testActivity");   SystemClock.sleep(1500);   getInstrumentation().runOnMainSync(new PerFromClick(btn));   SystemClock.sleep(1500);   assertEquals("hello andriod",textView.getText().toString());   }   private class PerFromClick implements Runnable {   Button btn2;   public PerFromClick(Button button){   btn2 = button;   }   @Override   public void run() {   btn2.performClick();   }   }   AndroidManifest.xml配置:   额外配置:   uses-library:使用的libraray配置   instrumentation:申明测试包名,单元测试的方式   <uses-library android:name="android.test.runner" />   <instrumentation android:targetPackage="com.example.jc.instrumentsample" android:name="android.test.InstrumentationTestRunner" />   测试执行:   build工程后,在终端输入命令:   $ adb shell am instrument -w com.example.jc.instrumentsample/android.test.InstrumentationTestRunner   com.example.jc.instrumentsample:包名   android.test.InstrumentationTestRunner:指明启动的单元测试类   运行结果:   执行命令后,会自动启动测试程序进行测试,测试结果会在终端显示。   单元测试一共执行了4个用例,其中3个失败(标红,失败的用力会有简单的log日志),1个通过(绿点,通过用例为点表示) com.example.jc.instrumentsample.sampleTest: Failure in testActivity junit.framework.ComparisonFailure: expected:<[hello andrio]d> but was:<[this is my first androi]d> at com.example.jc.instrumentsample.sampleTest.testActivity(sampleTest.java:84) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701) Failure in testAdd: junit.framework.AssertionFailedError: expected:<3> but was:<2> at com.example.jc.instrumentsample.sampleTest.testAdd(sampleTest.java:102) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701) . Failure in testSub: junit.framework.AssertionFailedError: expected:<1> but was:<-1> at com.example.jc.instrumentsample.sampleTest.testSub(sampleTest.java:109) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701) Test results for InstrumentationTestRunner=.F.F.. Time: 6.338 FAILURES!!! Tests run: 4,  Failures: 3,  Errors: 0


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯