Android单元测试初探——Instrumentation

举报
ShaderJoy 发表于 2021/12/29 23:11:26 2021/12/29
【摘要】 学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧! 首先,我们来了解一下android的测试类的层次结构: 可以看出android中的测试方法主要有Andr...


首先,我们来了解一下android的测试类的层次结构:

可以看出android中的测试方法主要有AndroidTextCase和InstrumentationTextCase。在这篇文章中,我将介绍Instrumentation这种测试方法,那么什么是Instrumentation?

Instrumentation和Activity有点类似,只不过Activity是需要一个界面的,而Instrumentation并不是这样的,我们可以将它理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。

下面通过一个简单的例子来讲解Instrumentation的基本测试方法。

1.首先建立一个Android project,类名为Sample,代码如下:


  
  1. public class Sample extends Activity {
  2. private TextView myText = null;
  3. private Button button = null;
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. myText = (TextView) findViewById(R.id.text1);
  9. button = (Button) findViewById(R.id.button1);
  10. button.setOnClickListener(new OnClickListener() {
  11. @Override
  12. public void onClick(View arg0) {
  13. myText.setText("Hello Android");
  14. }
  15. });
  16. }
  17. public int add(int i, int j) {
  18. return (i + j);
  19. }
  20. }





测试类的代码如下:


  
  1. public class SampleTest extends InstrumentationTestCase {
  2. private Sample sample = null;
  3. private Button button = null;
  4. private TextView text = null;
  5. /*
  6. * 初始设置
  7. * @see junit.framework.TestCase#setUp()
  8. */
  9. @Override
  10. protected void setUp() {
  11. try {
  12. super.setUp();
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. }
  16. Intent intent = new Intent();
  17. intent.setClassName("com.hustophone.sample", Sample.class.getName());
  18. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  19. sample = (Sample) getInstrumentation().startActivitySync(intent);
  20. text = (TextView) sample.findViewById(R.id.text1);
  21. button = (Button) sample.findViewById(R.id.button1);
  22. }
  23. /*
  24. * 垃圾清理与资源回收
  25. * @see android.test.InstrumentationTestCase#tearDown()
  26. */
  27. @Override
  28. protected void tearDown() {
  29. sample.finish();
  30. try {
  31. super.tearDown();
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. /*
  37. * 活动功能测试
  38. */
  39. public void testActivity() throws Exception {
  40. Log.v("testActivity", "test the Activity");
  41. SystemClock.sleep(1500);
  42. getInstrumentation().runOnMainSync(new PerformClick(button));
  43. SystemClock.sleep(3000);
  44. assertEquals("Hello Android", text.getText().toString());
  45. }
  46. /*
  47. * 模拟按钮点击的接口
  48. */
  49. private class PerformClick implements Runnable {
  50. Button btn;
  51. public PerformClick(Button button) {
  52. btn = button;
  53. }
  54. public void run() {
  55. btn.performClick();
  56. }
  57. }
  58. /*
  59. * 测试类中的方法
  60. */
  61. public void testAdd() throws Exception{
  62. String tag = "testAdd";
  63. Log.v(tag, "test the method");
  64. int test = sample.add(1, 1);
  65. assertEquals(2, test);
  66. }
  67. }


















  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.hustophone.sample" android:versionCode="1"
  4. android:versionName="1.0">
  5. <application android:icon="@drawable/icon" android:label="@string/app_name">
  6. <!--用于引入测试库-->
  7. <uses-library android:name="android.test.runner" />
  8. <activity android:name=".Sample" android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. <uses-sdk android:minSdkVersion="3" />
  16. <!--表示被测试的目标包与instrumentation的名称。-->
  17. <instrumentation android:targetPackage="com.hustophone.sample" android:name="android.test.InstrumentationTestRunner" />
  18. </manifest>





同时可以通过LogCat工具查看信息


(2) 通过模拟器运行单元测试

点击模拟器界面的Dev Tools菜单

再点击Instrumentation选项,进入Instrumentation菜单

这里有一个InstrumentationTestRunner,它是测试的入口,点击这个选项,就可以自动运行我们的测试代码。以下为运行结果:

按钮点击前

按钮点击后

至此,一个简单的测试过程结束了。当然,android的测试内容还有很多,也有比较复杂的,我会在以后的学习过程中继续分享我的体会。好了,今天就到这里吧!


文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/8767820

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。