SDKInstrumentation创建一个Note的实例

除了高层框架如Robotium的solo,我们也可以直接调用SDK底层的提供的Instrumentation的API来实现如前几篇文章描述的创建一个note的功能。总所周知之Robotium就是基于Instrumentation的框架高层抽象实现的一个项目,所以对比《Robotium创建一个Note的实例》,我们可以看到robotium的实现比起直接调用Instrumetnation简介了很多。这就好比你用文本编辑器直接编写调用WIN32 API和通过Visual Studio调用高层封装的MFC实现相同功能的应用的差别。

公司主营业务:成都网站设计、做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出江达免费做网站回馈大家。

该测试代码是建立在测试目标项目NotePad之下的

SDK Instrumentation创建一个Note的实例

相对之前的例子,我们这里没有提供最后的查找到新创建的Note然后删除的功能,因为我暂时还没有查到在Instrumentation如何获得一个没有ID的ListView下面的一个TextView,当前我知道的Instrumeentation下只有findViewById的功能。

实例如下:

package come.excample.android.notepad.test;  import com.example.android.notepad.NoteEditor; import com.example.android.notepad.NotesList;   import com.example.android.notepad.R;  import android.app.Activity; import android.app.Instrumentation; import android.app.Instrumentation.ActivityMonitor; import android.content.Intent; import android.os.SystemClock; import android.test.InstrumentationTestCase; import android.view.KeyEvent; import android.widget.TextView;  public class InstrumentationTest extends InstrumentationTestCase { 	NotesList mActivity = null; 	//private static Instrumentation instrumentation = new Instrumentation(); 	 	@Override  	protected void setUp() throws Exception { 		super.setUp(); 		 		//Start the NotesList activity by instrument 		Intent intent = new Intent(); 		intent.setClassName("com.example.android.notepad", NotesList.class.getName()); 		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 		mActivity = (NotesList) getInstrumentation().startActivitySync(intent); 	} 	 	 @Override 	    protected void tearDown()  { 	        mActivity.finish(); 	        try { 	            super.tearDown(); 	        } catch (Exception e) { 	            e.printStackTrace(); 	        } 	 } 	 	 public void testActivity() throws Exception { 	         		 	//Add activity monitor to check whether the NoteEditor activity's ready 	        ActivityMonitor am = getInstrumentation().addMonitor(NoteEditor.class.getName(), null, false); 	         	        //Evoke the system menu and press on the menu entry "Add note"; 	        getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); 	        getInstrumentation().invokeMenuActionSync(mActivity, R.id.menu_add, 0); 	         	        //Direct to the NoteEditor activity 	        Activity noteEditorActivity = getInstrumentation().waitForMonitorWithTimeout(am, 60000); 	        assertEquals(NoteEditor.class,noteEditorActivity.getClass()); 	        SystemClock.sleep(3000); 	        //assertEquals(true, getInstrumentation().checkMonitorHit(am, 1)); 	         	        //Input the text of the new created note 	        TextView noteEditor = (TextView) noteEditorActivity.findViewById(R.id.note); 	        getInstrumentation().runOnMainSync(new PerformSetText(noteEditor,"Note1")); 	         	        //Save the new created note 	        getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); 	        getInstrumentation().invokeMenuActionSync(noteEditorActivity, R.id.menu_save, 0);  	    } 	  	 private class PerformSetText implements Runnable { 	        TextView tv; 	        String txt; 	        public PerformSetText(TextView t,String text) { 	            tv = t; 	            txt = text; 	        } 	   	        public void run() { 	            tv.setText(txt); 	        } 	    } 	  	 //TBD, currently don't know the way to perform deleting of a menu entry by context menu options, have to roll with it 	 /* 	 private class PerformLongClick implements Runnable { 	        TextView textView; 	        public PerformLongClick(TextView object) { 	            textView = (TextView) object; 	        } 	   	        public void run() { 	            textView.performLongClick(); 	        } 	    } 	 */ 	  } 


网站题目:SDKInstrumentation创建一个Note的实例
浏览路径:http://scyanting.com/article/ghdgge.html