• Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法1


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

    Item

    Description

    Warning

    作者

    天地会珠海分舵 转载请注明出处!

    服务平台

    自主博客:http://techgogogo.comCSDN博客http://blog.csdn.net/zhubaitian 微信公众号: 请搜索TechGoGoGo 或扫描: qrcode_for_gh_0388b3c825f5_430  
  • 相关阅读:
    X-010 FriendlyARM tiny4412 uboot移植之移植网卡驱动TFTP用起来
    使用NFS启动Tiny4412开发板根文件系统
    《C专家编程》第四章——令人震惊的事实:数组和指针并不相同
    《C专家编程》第三章——分析C语言的声明
    《C专家编程》第二章——这不是Bug,而是语言特性
    《C专家编程》第一章——C:穿越时空的迷雾
    《C与指针》读后感
    《C与指针》第十五章练习
    《C与指针》第十四章练习
    《C与指针》第十三章练习
  • 原文地址:https://www.cnblogs.com/techgogogo/p/4284801.html
Copyright © 2020-2023  润新知