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

本文来源于:http://blog.csdn.net/zhubaitian/article/details/39293883

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

  1、不能通过annotate的方式来识别子类的新特征,如不能实现@beforeclass,@afterclass等特征。只能通过写setup和teardown,

  2、TestCase只能以test开头进行测试case书写。

那么有时我们并不想每次开始/完成一个case的时候都做一些重复的动作,也就是要实现Junit4的@beforeclass和@afterclass,该怎么办呢?
以SDK自带的Notepad测试用例作为例子,假如现在我们需要实现两个测试用例
  1、testAddNoteCNTittle:创建一个中文标题的笔记

  2、testAddNoteEngTitle:创建一个英文标题的笔记

根据实例提供的代码,在setup里面会初始化solo而在teardown里面会关闭所有打开的activities,也就是说每执行一个case都会重新初始化一次solo和关闭所有的activities:

 1 @Override
 2 public void setUp() throws Exception {
 3     //setUp() is run before a test case is started.
 4     //This is where the solo object is created.
 5     super.setUp();
 6     this.activity = this.getActivity();
 7     this.solo = new Solo(getInstrumentation(), getActivity());
 8 }
 9
10 @Override
11 public void tearDown() throws Exception {
12     //tearDown() is run after a test case has finished.
13     //finishOpenedActivities() will finish all the activities that have been opened during the test execution.
14     solo.finishOpenedActivities();
15 }

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

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;
    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();
        //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");
    }
}
    
时间: 2024-11-03 05:29:45

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

解释JUnit中@BeforeClass和@AfterClass标注的方法必须是static的,而在TestNg不必

在JUnit中@BeforeClass和@AfterClass标注的方法必须是static的:但是在TestNg中却没有这样的限制,这是为什么呢. 其实和他们两的运行机制有关. 在junit中: 每运行一个@Test方法,就会为该测试类新建一个新的实例.(所以@BeforeClass和@AfterClass必须是static的,因为运行他们的时候,测试类还没有实例化呢.) 有没有发现这有助于提高测试方法之间的独立性,因为每个@Test执行的时候,都新建了一个实例,这样的话,可以避免测试方法之间重

如何根据需求分析文档编写测试用例

从拿到需求文档不要立马开始着手写测试用例,需要仔细推敲整理需求,画出系统级.模块内流程图,并找出各种测试点,等对需求进行了头脑风暴般的整理之后,此时已对测试系统的功能很清楚了, 再着手开始写测试用例. 那么编写测试用例的总体思路是什么呢? 1.整理分析需求文档 仔细将需求文档阅读一遍,记录不明白的地方及关键测试点,简单画出总体流程图. 然后再来一遍,仔细分析各个模块的功能,画出模块内流程图,找出所有功能,并列出主要测试点 2.编写用例 按照不同的业务规则可将测试用例分为四部分: 场景用例.系统用

如何编写测试用例

如何编写测试用例 用例的五个构成元素: 用例标题 前置条件 测试步骤 期望结果 后置条件 下面从这五个元素的角度,去剖析如何编写测试用例 用例标题 用例标题就是测试点名称.用例标题是用来说明这个用例的测试目的的,好的用例标题是别人看完你这个用例标题后就知道你这个用例是测什么的.但并不是标题越详细越好.既然是标题,就要言简意赅,能多简洁就多简洁,但简洁的同时又要能体现你的测试目的.用例的标题最好不要超过30个字,太长会让人看起来很累也很不专业.一般可以遵循这样的公式:主体(可省略) + 动词 +

用路径分析法来编写测试用例

熟悉测试理论的人都知道,路径覆盖是白盒测试中一种很重要的方法,广泛应用于单元测试.那么基于路径覆盖的分析方法是不是只能应用于单元测试呢,能不能将其推而广之呢.一般而言,在单元测试中,路径就是指函数代码的某个分支,而实际上如果我们将软件系统的某个流程也看成路径的话,我们将可以尝试着用路径分析的方法来设计测试用例.采用路径分析的方法设计测试用例有两点好处:一是降低了测试用例设计的难度,只要搞清了各种流程,就可以设计出高质量的测试用例来,而不用太多测试方面的经验:二是在测试时间较紧的情况下,可以有的放

Eclipse中使用Junit编写测试用例

Eclipse自带Junit插件,不用安装就能在项目中编写测试用例,非常方便. 在项目中添加Junit库 在编写测试用例之前,需要先引入Junit.对项目根目录右键,选择Properties,Java Build Path,Libraries,如图: Add Library,选择Junit: 点Next选择Junit版本,然后Finish就完成了引入. 编写测试用例 假设有如下类: package choon.test; public class Calculate { public int A

Android之编写测试用例

测试是软件工程中一个非常重要的环节,而测试用例又可以显著地提高测试的效率和准确性.App测试用例其实就是一段普通的程序代码,通常是带有期望的运行结果的,测试者可以根据最终的运行结果来判断程序是否能正常工作. 我相信大多数的程序员都是不喜欢编写测试用例的,因为这是一件很繁琐的事情.明明运行一下程序,观察运行结果就能知道对与错了,为什么还要通过代码来进行判断呢?确实,如果只是普通的一个小程序,编写测试用例是有些多此一举,但是当你正在维护一个非常庞大的工程时,你就会发现编写测试用例是非常有必要的. 举

编写测试用例

成功是一种观念,致富是一种义务,快乐是一种权力. 本讲内容:测试用例 测试用例通常是带有期望的运行结果的程序代码,测试者可以根据最终的运行结果来判断程序是否正常工作. 一.测试用例的好处 譬如你正在维护一个很庞大的工程,里面有许多的功能,某天,根据需求你对其中一个功能进行修改,几天后,突然有人发现其他功能出现了问题,最终定位出来的原因是你之前修改的那个功能所导致的.所以当项目比较庞大时,一般都应该编写测试用例.如果我们给项目的每一项功能都编写了测试用例,每当修改或新增任何功能之后,就将所有的测试

1.5如何编写测试用例

1.测试用例定义 描述每一个测试点的数据设计和步骤设计叫测试用例 2.重要性 软件测试核心,工作的基本 评估测试结果的基准 保证测试时不遗漏测试的功能点 对系统架构或者业务流程深入了解 方便测试用例评审 3.测试用例组成 3.1.用例编号 如:产品名-测试阶段-测试项-测试子项-xxx 3.2.测试项目:对应一个功能模块 3.3.测试标题:输入内容加结果,标题不能重复 3.4.重要级别:高/中/低 3.5.预置条件:前提条件 3.6.测试输入:需要加工的输入信息,根据具体情况来设计(跟步骤结合起

等价类和边界值方法编写测试用例

测试用例概念: 定义:测试用例是为了特殊目的,而主要记录了测试步骤.方法.数据.预期结果的文档,由测试人员在执行测试之前编写. 写用例主要包括:(编号.测试目的.用例描述(步骤.数据).预期结果) 测试中你可能会用到的问题? 不知道是否全面测试了所有问题? 所有的功能是否全测试到了? 每个功能测试的是否全面? 存在大量冗余测试,影响测试效率. 有些功能点可能测试多次? 对新版本的重复测试很难实施. 每个版本测试的步骤,数据都不一样,随意性很强. 测试的覆盖率无法衡量. 最后测试的结果好与坏无法准