老李分享:Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法1 - 条件判断法

 

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。

Robotium的测试类ActivityInstrumentationTestCase2是继承于Junit3的TestCase类,所以并没有提供Junit4的特性.如网上总结说的

  • 不能通过annotate的方式来识别子类的新特征,如不能实现@beforeclass,@afterclass等特征。只能通过写setup和teardown,
  • TestCase只能以test开头进行测试case书写。
那么有时我们并不想每次开始/完成一个case的时候都做一些重复的动作,也就是要实现Junit4的@beforeclass和@afterclass,该怎么办呢?
以SDK自带的Notepad测试用例作为例子,假如现在我们需要实现两个测试用例
  • testAddNoteCNTittle:创建一个中文标题的笔记
  • testAddNoteEngTitle:创建一个英文标题的笔记
根据实例提供的代码,在setup里面会初始化solo而在teardown里面会关闭所有打开的activities,也就是说每执行一个case都会重新初始化一次solo和关闭所有的activities:

@Override

public void setUp() throws Exception {

//setUp() is run before a test case is started.

//This is where the solo object is created.

super.setUp();

this.activity = this.getActivity();

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

}

@Override

public void tearDown() throws Exception {

//tearDown() is run after a test case has finished.

//finishOpenedActivities() will finish all the activities that have been opened during the test execution.

solo.finishOpenedActivities();

}

但事实上我们在这个脚本只是去创建两个Note,并不需要每执行完一个case都要去初始化solo和关闭所有activities。google后没有发现有现成的取代@beforeclass和@aferclass的方法。
以下本人的实现方法

<pre name="code" class="java">package com.example.android.notepad.test;

import com.robotium.solo.Solo;

import android.test.ActivityInstrumentationTestCase2;

import android.app.Activity;

@SuppressWarnings("rawtypes")

public class TCCreateNote extends ActivityInstrumentationTestCase2{

private static Solo solo = null;

public Activity activity;

<span style="white-space:pre">     </span>private static final int NUMBER_TOTAL_CASES = 2;

private static int run = 0;

private static Class<?> launchActivityClass;

//对应re-sign.jar生成出来的信息框里的两个值

private static String mainActiviy = "com.example.android.notepad.NotesList";

private static String packageName = "com.example.android.notepad";

static {

try {

launchActivityClass = Class.forName(mainActiviy);

} catch (ClassNotFoundException e) {

throw new RuntimeException(e);

}

}

@SuppressWarnings("unchecked")

public TCCreateNote() {

super(packageName, launchActivityClass);

}

@Override

public void setUp() throws Exception {

//setUp() is run before a test case is started.

//This is where the solo object is created.

super.setUp();

<span style="white-space:pre">              </span>//The variable solo has to be static, since every time after a case's finished, this class TCCreateNote would be re-instantiated

// which would lead to soto to re-instantiated to be null if it's not set as static

if(solo == null) {

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

}

}

@Override

public void tearDown() throws Exception {

//Check whether it's the last case executed.

run += countTestCases();

if(run >= NUMBER_TOTAL_CASES) {

solo.finishOpenedActivities();

}

}

public void testAddNoteCNTitle() throws Exception {

solo.clickOnMenuItem("Add note");

solo.enterText(0, "中文标签笔记");

solo.clickOnMenuItem("Save");

solo.clickInList(0);

solo.clearEditText(0);

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

solo.clickOnMenuItem("Save");

solo.assertCurrentActivity("Expected NotesList Activity", "NotesList");

solo.clickLongOnText("中文标签笔记");

solo.clickOnText("Delete");

}

public void testAddNoteEngTitle() throws Exception {

solo.clickOnMenuItem("Add note");

solo.enterText(0, "English Title Note");

solo.clickOnMenuItem("Save");

solo.clickInList(0);

solo.clearEditText(0);

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

solo.clickOnMenuItem("Save");

solo.assertCurrentActivity("Expected NotesList Activity", "NotesList");

solo.clickLongOnText("English Title Note");

solo.clickOnText("Delete");

}

}

老李分享:Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法1 - 条件判断法的更多相关文章

  1. Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法1 - 条件判断法

    本文来源于:http://blog.csdn.net/zhubaitian/article/details/39293883 Robotium的测试类ActivityInstrumentationTe ...

  2. Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法2 - SingleLaunchActivityTestCase

    本文来源于:http://blog.csdn.net/zhubaitian/article/details/39296753 在上一遍笔记博客中本以为只能在Setup和TearDown中做条件判断来实 ...

  3. 老李分享:robotium常用API 1

    老李分享:robotium常用API   robotium常用API Robotium中最重要的类Solo类:其中提供了模拟用户活动的点击.搜索.拖拽等方法. 英文api(经常断开连接打不开):htt ...

  4. 老李分享:Robotium创建Note的实例

    老李分享:Robotium创建Note的实例   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq ...

  5. 老李分享:接口测试之jmeter

    老李分享:接口测试之jmeter   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.移动端自动化测试很多人把他仅仅理解成appu ...

  6. 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具

    老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...

  7. 老李分享:android app自动化测试工具合集

    老李分享:android app自动化测试工具合集   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...

  8. 老李分享: JSON

    老李分享: JSON    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478, ...

  9. 老李分享:SSL协议相关证书

    老李分享:SSL协议相关证书   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

随机推荐

  1. Cocoapods在OS X Yosemite上升级时 报错的解决方法

    原始地址:http://www.cocoachina.com/ios/20141018/9958.html 今天升级了Mac OS X 10.10-Yosemite以后运行pod install遇到下 ...

  2. angular、vue使用感受

    最近开始学习并使用vue.js,并使用vue+node开发了一个移动端APP来练手,下面想聊聊我对于vue的粗浅看法,并将它和angular进行一些对比: 1.vue是一个轻量.高效的前端组件化框架, ...

  3. 将Error异常日志从普通日志中剥离

    开发过程中经常需要调试和线上环境查看异常日志的需求,但普通消息与异常消息混在一起实在是非常难得找,上则NM的文档够你头痛,所以就将Error级别的日志抽离出来. 本示例采用log4net来配置: 1. ...

  4. 文件上传----FTP部署

  5. javascript深入理解js闭包(转载)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  6. Spring框架(6)---AspectJ实现AOP

    AspectJ实现AOP 上一篇文章Spring框架(4)---AOP讲解铺垫,讲了一些基础AOP理解性的东西,那么这篇文章真正开始讲解AOP 通过AspectJ实现AOP要比普通的实现Aop要方便的 ...

  7. tp框架基础(详细步骤分解,易懂)下

    在浏览器中如果要访问操作方法的时候以什么方式来访问 有四种方式 第一种是get方式,第二种是访问路径 这四种方式我们可以通过修改配置文件来改掉url的模式 我们需要来改一下我们的配置文件 在这个路径下 ...

  8. swiper遇到的问题及解决方法

    上一家公司主要是做些微信的场景页啥的,然后需要快速开发,所以第一时间选择了swiper,毕竟开发快速,比较方便然后api多(虽然并没有用很多),用这个的朋友.缺点的话有时候用了就晓得,下面开始讲讲,第 ...

  9. sed 删除换行符

    sed 删除换行符 sed ':label;N;s/\n/:/;b label' filename sed ':label;N;s/\n/:/;t label' filename 上面的两条命令可以实 ...

  10. .net core 部署 centos7 初试

    最近抽时间搞搞.net core,这方面已经有很多先驱人物贡献了好多文章了,今天沿着前辈们走的坑自己再淌一下...... 注意开头说的使用centos7,我电脑之前全是6.几的版本,然后就一头雾水的搞 ...