惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 盈盈的工作小纸条

如何清除svn的账号缓存信息(solaris) EMMA 覆盖率工具 强大的ldd 如何对字典中的元素进行排序 在solaris上安装iperf Robotium 数据驱动测试框架 (原创)初试Robotium (原创)LoadRunner 中 调用dll Apache+Mysql+PHP 套件 [转]国外人气最旺的软件测试网站 P6Spy & Irontrack SQL 简单使用 sysbench介绍 Sysbench 安装 代码覆盖率测试 批量修改文件内容 Gnuplot--linux下的画图工具 - 盈盈的工作小纸条 - 博客园 SMTP协议简介 shell 命令 perl:日期转换(date->unixtime) - 盈盈的工作小纸条 - 博客园
(原创)学习NotesList(Robotium自带的例子)
盈盈的工作小纸条 · 2011-05-19 · via 博客园 - 盈盈的工作小纸条

我想大家在安装完robotium后,都会试试noteslist 这个例子吧。这个是官网提到的例子

首先打开noteslist 源码

C:\android-sdk_r10-windows\android-sdk-windows\samples\android-7\NotePad 

再打开noteslisttest 源码

可以从上面下载 http://code.google.com/p/robotium/downloads/list/ExampleTestProject_v2.3.zip

要做一点修改。 因为noteslist是在androidV21开发的,而我的测试代码是V23的。我们最好要改成一致的。

修改 noteslisttest 下的AndroidManifest.xml

<uses-sdk android:minSdkVersion="9" /> 

改成<uses-sdk android:minSdkVersion="7" /> 

这两个数字表示什么意思呢?

7--androidV21,9--androidV23,最低版本是3--AndroidV15.

大家按顺序排就知道哪个数字对应的版本了

然后在 noteslisttest 右击选中Properties--Android,选中AndroidV21

这样noteslisttest 里带的android jar 由android2.3 变为android2.1

再说一个配置,我觉得也很重要

还是在AndroidManifest.xml 里

<instrumentation android:targetPackage="com.example.android.notepad" android:name="android.test.InstrumentationTestRunner" />  

红色加粗的字符串表示我们要测试代码的package

OK,这样我们就弄好代码了。 我们只需要执行Run As--Android Junit test

下面我们看看 noteslisttest 里的具体代码,看看它是怎么测试的

// 告知系统我要测试的app是什么

  public NotePadTest() {

super("com.example.android.notepad", NotesList.class);

}

//打开noteslist 

public void setUp() throws Exception {

solo = new Solo(getInstrumentation(), getActivity());

}

public void testAddNote() throws Exception {

solo.clickOnMenuItem("Add note");

//Assert that NoteEditor activity is opened

solo.assertCurrentActivity("Expected NoteEditor activity", "NoteEditor"); 

//In text field 0, add Note 1

solo.enterText(0, "Note 1");

solo.goBack(); 

//Clicks on menu item

solo.clickOnMenuItem("Add note");

//In text field 0, add Note 2

solo.enterText(0, "Note 2");

//Go back to first activity named "NotesList"

solo.goBackToActivity("NotesList"); 

boolean expected = true;

boolean actual = solo.searchText("Note 1") && solo.searchText("Note 2");

//Assert that Note 1 & Note 2 are found

assertEquals("Note 1 and/or Note 2 are not found", expected, actual); 

} 

这是我们第一个case,主要目的是测试添加文本的功能 

clickOnMenuItem(String)

功能是点击Menu按钮,选择文本描述为String的菜单,如我们的例子是"Add note"

assertCurrentActivity(String message,String name)

这个是判断当前的activity是否和我预期的一致

message是描述性的文字

name是指activity的名字

关于如何知道activity 名字,我找了半天的文档,目前的方法是得看源码中的 AndroidManifest.xml--Application label--Application Nodes,在那里我们可以看到所有的activity的name

enterText(int index,string text)

index用来标识写到哪个EditText中。如果当前只打开一个EditText,那index=0

text:就是我们要写入的内容

goBack() 

相当于手机上的 返回键(back key)

goBackToActivity(String name)

返回到指定的activity

searchText(String text)

在当前的activity中搜索是否含有text的内容 

public void testEditNote() throws Exception {

// Click on the second list line

solo.clickInList(2); 

// Change orientation of activity

solo.setActivityOrientation(Solo.LANDSCAPE);

// Change title

solo.clickOnMenuItem("Edit title");

//In first text field (0), add test

solo.enterText(0, " test");  

solo.goBackToActivity("NotesList");

boolean expected = true;

// (Regexp) case insensitive

boolean actual = solo.searchText("(?i).*?note 1 test"); 

//Assert that Note 1 test is found

assertEquals("Note 1 test is found", expected, actual); 

} 

第二个case,主要是测试编辑功能的

clickInList(int index)

 点击list表的第index行,进入该文本界面

 solo.setActivityOrientation(Solo.LANDSCAPE);

 setActivityOrientation,设置手机屏幕显示方式

 LANDSCAPE:横向显示

 Portrait:竖向显示 

 public void testRemoveNote() throws Exception {

//(Regexp) case insensitive/text that contains "test"

solo.clickOnText("(?i).*?test.*");

//Delete Note 1 test

solo.clickOnMenuItem("Delete");

//Note 1 test & Note 2 should not be found

boolean expected = false;   

boolean actual = solo.searchText("Note 1 test");

//Assert that Note 1 test is not found

assertEquals("Note 1 Test is not found", expected, actual);  

solo.clickLongOnText("Note 2");

//Clicks on Delete in the context menu

solo.clickOnText("(?i).*?Delete.*");  

actual = solo.searchText("Note 2");

//Assert that Note 2 is not found

assertEquals("Note 2 is not found", expected, actual);  

}

 第三个case,是用来测试删除功能的

 clickOnText(String text)

点击包含该文字的地方

其中text可以用正则表达式表示

(?i)----忽略大小写。默认情况是大小写敏感的。

正则表达式与java保持一致

clickLongOnText(String text)

长时间按住所选的文字

例子看上去还比较简单。学了几个函数方法。 

 请尊重原创,转载请注明来源:http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html