要资料 文章 文库 视频 Code iProcess 课程 认证 咨询 工具 讲座吧   成长之路  
会员   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
分享到
Android JUnit 入门指南
 
作者 xiaochao1234的博客,火龙果软件    发布于 2014-05-08
 

自动化单元测试可以做许多的事,并帮你节省时间。它也可以被用作快速检验新建工程或进行冒烟测试。始终,单元测试是作为一种有效的、系统的检验应用程序各功能执行的方式。Android SDK支持JUnit的自动化单元测试。本教程假设你已熟悉Android和JUnit在Eclipse的使用。

创建一个Android的JUnit项目

如果你的Eclipse中已经有Android项目,就不用再创建了。如果你的Eclipse中没有Android项目,你可以创建一个JUnit项目,在创建JUnit项目的同时也会为你创建Android项目。

对现有的Android项目,在Eclipse中右键单击,选择“Android Tools”,然后“New Test Project...”,如下图:

如果是新建Android项目,在“New Android Project”对话框中,按“Next”按钮,如下图:

无论按照上面哪种方式,你都会在这个时候创建Android项目的新测试项目。创建测试项目的对话框,如下图所示,通常会自动填写上一些标准的命名约定等细节。如果没有,请自己填写,并创造该项目。

在Android中创建一个JUnit测试用例

Android应用程序通常是由一些Activity类组成的。事实上,每一个ACtivity都可以是一个独立实体,进行测试。Android SDK中包含了几个类来测试ACtivity类。现在我们将使用一个。

右键单击你的测试项目。选择“New”,然后“JUnit Test Case”:

在新建JUnit测试用例对话框上填写,使用超类是android.test.ActivityInstrumentTestCase2,其中T是我们要测试的Activity,如下图:

点击“完成”按钮,这个类就创建成功了。注意:由向导创建的默认构造函数是不正确的。我们需要修改它,让它不带任何参数,调用不同的super()的方法,代码如下

 public ScreenValidation() { 

2    super("com.mamlambo.testingproject.TestingProjectActivity", 
3      TestingProjectActivity.class); 
4 } 

setUp()方法中,应配置运行这个测试用例所需的所有东西。Activity实例随时可以被getActivity()方法调用。例如:如果我们想在测试中显示一个TextView在Activity上,我们可以实现setUp()方法,如下:

TextView helloText; 
2 protected void setUp() throws Exception { 
3   super.setUp(); 
4   helloText = (TextView) getActivity(). 
5      findViewById(R.id.hello_textview); 
6 } 

在Android中添加单元测试

此时你可以创建各种测试。你可以获取到Activity布局上所有控件,以及在应用程序的任何代码。由于使用Activity测试用例,我们可能感兴趣于用户界面,布局,及功能。让我们看看TextView控件显示在屏幕上。

 public void testHelloTextVisibility() { 
02    View container = getActivity().findViewById(R.id.container_layout); 
03    int boundaryWidth = container.getWidth(); 
04    int boundaryHeight = container.getHeight(); 
05   
06    int[] location = new int[2]; 
07    container.getLocationOnScreen(location); 
08   
09    int[] helloTextLocation = new int[2]; 
10    helloText.getLocationOnScreen(helloTextLocation); 
11   
12    Rect textRect = new Rect(); 
13    helloText.getDrawingRect(textRect); 
14  
15    boolean widerThanBoundary = (textRect.width() > boundaryWidth); 
16    boolean tallerThanBoundary = (textRect.height() > boundaryHeight); 
17    boolean extendsOffRight = location[0] + boundaryWidth 
18      > helloTextLocation[0] + textRect.width(); 
19    assertTrue("Text wider than boundary", widerThanBoundary); 
20    assertTrue("Text taller than boundary", tallerThanBoundary); 
21    assertTrue("Text goes off right side", extendsOffRight); 
22   
23    // ... and so on 
24  } 

所有的测试方法必须用“test”做前缀。上面,我们已经创建了一个测试名为“HelloTextVisibility”的方法。如果测试通过或失败,assertFalse()都会被调用。(assertTrue()方法只有是true时调用。)

运行JUnit测试用例

运行测试和测试用例,点击Eclipse的Debug,选择Android JUnit测试。如果你喜欢,你还可以创建一个Android JUnit测试配置,自定义这些设置。

如下图,我们的小应用程序在横屏模式下,“Hello Text Visibility”测试通过:

但在竖屏模式下,未能通过测试:

很显然,我们的布局设计在竖屏模式下显示不正确。(注:这可能是设置的宽度像素超过了手机的,而没有使用合适的单位,如DP或是match_parent。)

Android应用程序的质量在于单元测试

创建单元测试时,必须小心谨慎。如果测试用例不正确,测试的东西通过了,也没有价值。这是非常糟糕的,因为它可能掩盖了一些问题。所以测试用例与代码本身一样重要。测试测试用例的主要方式是通过做代码审查,并确保它们确实在测试。

当然,测试Android框架的功能对于你的app来说,没有起到特别大的作用。比如,测试设置文本字段的值,然后读取它,看它是否相同。测试常规的TextView,并不是特别有意义的(除非你的SDK在一个新的设备上使用)。然而,如果是测试你自己实现的TextView,那就有必要了。

这并不是说任何代码框架都是那样的完美无缺,但测试的事情是值得花许多心思的去写测试开始的。如果失败了,比起的你的应用程序,你将有更大的问题。还有是对SDK之间的细微差别的测试,在上面的例子中,我们没有这么做,是因为我们使用了正确的SDK。

因此,如果你是自动化单元测试的新手,我们建议你做一些这方面的课题研究。一个不错的地方是JUnit.org。

结论

在本教程中,你已经学会如何快速添加一个新的测试项目,并在Eclipse的Android项目中使用JUnit对你的app执行自动化测试。单元测试可以为逻辑测试,功能测试和用户界面测试等,不再是专门手动测试移动应用。然而,使用一个包含自动化单元测试的套件,有几大好处:它可以节省时间,金钱和资源,以及提供一套可靠的,重复性的测试,并且可以运行在许多不同的设备配置中。

 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
 
分享到
 
 


android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...   
 
 
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号