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");
    }
}                    
    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值