热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Android]单元测试实例

转自:http:yuanzhifei89.iteye.comblog1122104作者:yuanzhifei[b]测试相关资源[b]让开发自动化:用E
转自:http://yuanzhifei89.iteye.com/blog/1122104 作者:yuanzhifei



[b]测试相关资源 [/b]

让开发自动化: 用 Eclipse 插件提高代码质量[url=http://www.ibm.com/developerworks/cn/java/j-ap01117/index.html]http://www.ibm.com/developerworks/cn/java/j-ap01117/index.html[/url]



代码测试覆盖率介绍:[url=http://www.cnblogs.com/coderzh/archive/2009/03/29/1424344.html]http://www.cnblogs.com/coderzh/archive/2009/03/29/1424344.html[/url]





[b]学习android单元测试时遇到的一些问题:[/b]

1.开始以为单元测试一定要从程序的launch Activity,一步一步的跳转到所要测试的Activity能对其进行测试。

但实际上,我们可以从任意一个activity开始,对任意一个activity进行测试。



2.在运行单元测试之前,一定要先将要测试的程序安装到模拟器或真机上。



[b]junit相关 [/b]

android中的测试框架是扩展的junit3,所以在学习android中的单元测试签,可以先熟悉下junit3的使用,junit3要学习的东西应该并不多,就几页纸的东西。入门可以参考这个:[url=http://android.blog.51cto.com/268543/49994]http://android.blog.51cto.com/268543/49994 [/url]



[b]android单元测试框架中涉及的注解[/b]

@Suppress 可以用在类或这方法上,这样该类或者该方法就不会被执行

@UiThreadTest 可以用在方法上,这样该方法就会在程序的ui线程上执行

@LargeTest, @MediumTest, @SmallTest 用在方法上,标记所属的测试类型,主要是用于单独执行其中的某一类测试时使用。具体参考InstrumentationTestRunner类的文档。

@Smoke 具体用法还不清楚



[b]android单元测试框架中涉及的一些类的uml[/b]



[img]http://dl.iteye.com/upload/attachment/513766/4db7f7f4-80a0-3831-9013-0f23e79b69ba.png[/img]





[b]接下来我们以demo project来讲解如何使用android中的单元测试[/b]

主要包括了三个activity:

MainActivity:仅包含一个button,点击后就可以进入LoginActivity



LoginActivity:可以输入username, password,然后点击submit的话可进入HomeActivity,如果点击reset的话,输入的内容就会被清空



HomeActivity:在TextView中显示LoginActivity输入的内容



[b]首先我们创建要测试的项目demo(使用了2.1)[/b]

[img]http://dl.iteye.com/upload/attachment/513754/799321ed-ed41-344d-a9dd-4dd0e7579cb3.png[/img]



[img]http://dl.iteye.com/upload/attachment/513756/c176e312-28fa-33c9-8370-347aa4298890.png[/img]



[img]http://dl.iteye.com/upload/attachment/513758/807f08b9-02be-3a49-bb49-248db3ccc4b8.png[/img]







[b]MainActivity代码 [/b]



public class MainActivity extends Activity {
private static final boolean DEBUG = true;
private static final String TAG = "-- MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
if (DEBUG) {
Log.i(TAG, "onCreate");
}

super.onCreate(savedInstanceState);
setContentView(R.layout.act_main);
View toLoginView = findViewById(R.id.to_login);
toLoginView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (DEBUG) {
Log.i(TAG, "toLoginView clicked");
}

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(intent);
}
});
}
}




[b]MainActivity的布局文件[/b]



xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

推荐阅读
author-avatar
手机用户2602916725
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有