Sunday 30 March 2014

Android action bar item test case using Robotium

Hello friends,
                  This is my small tutorial on Android test driven development using Robotium
Today, I am going to share the code which helps you in writing the testcase for
action bar menu item selection.

Here is the complete video  for your reference:

Here is my code:

1. MainActivityTest.java


/*
 * Copyright (C) 2014 Mukesh Y authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.example.actionbar;

import android.R.integer;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.widget.TextView;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener;
import com.actionbarsherlock.view.SubMenu;

/**
 * @author Mukesh Y
 */
public class MainActivity extends SherlockActivity implements
  OnMenuItemClickListener {

 private SubMenu mSortItem;
 private MenuItem mMapItem;
 private int MAP_ID = 101;
 private int SORT_ID = 102;

 CharSequence selected = "Light";
 TextView mTextView;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
  setContentView(R.layout.activity_main);

  mTextView = (TextView)findViewById(R.id.theme);
  ActionBar ab = getSupportActionBar();
  ab.setBackgroundDrawable(getApplicationContext().getResources()
    .getDrawable(R.drawable.bg_titlebar_tile));
  ab.setDisplayShowTitleEnabled(true);
  mTextView.setText(selected);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {

  mSortItem = menu.addSubMenu(0,SORT_ID,0,selected);
  mSortItem.setIcon(R.drawable.ic_menu_sort);
  
  mSortItem.getItem().setShowAsAction(
    MenuItem.SHOW_AS_ACTION_IF_ROOM
      | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
  mMapItem = menu.add(0, MAP_ID, 0, "map");
  mMapItem.setIcon(R.drawable.google_maps_icon_pressed)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

  getMenuState("Light");
  return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  
  if (item.getItemId()==mMapItem.getItemId()) {
   Intent mapIntent = new Intent(this, Map.class);
   startActivity(mapIntent);
  } else {

  }
  return true;
 }

 @Override
 public boolean onMenuItemClick(MenuItem item) {
  mSortItem.clear();
  getMenuState(item.getTitle());
  return false;
 }

 public void getMenuState(CharSequence selected) {
  mTextView.setText(selected);
  if (selected.equals("Default")) {
   mSortItem.add(0, R.style.Theme_Sherlock, 0, "Default")
     .setIcon(android.R.drawable.checkbox_on_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light, 0, "Light")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light_DarkActionBar, 0, "Light (Dark Action Bar)")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   
   setTheme(R.style.Theme_Sherlock);
  } else if (selected.equals("Light")) {
   mSortItem.add(0, R.style.Theme_Sherlock, 0, "Default")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light, 0, "Light")
     .setIcon(android.R.drawable.checkbox_on_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light_DarkActionBar, 0, "Light (Dark Action Bar)")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   setTheme(R.style.Theme_Sherlock_Light);
  } else {
   mSortItem.add("Default")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light, 0, "Light")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light_DarkActionBar, 0, "Light (Dark Action Bar)")
     .setIcon(android.R.drawable.checkbox_on_background)
     .setOnMenuItemClickListener(this);
   setTheme(R.style.Theme_Sherlock_Light_DarkActionBar);
  }

 }
}


2. AllTests.java
/*
 * Copyright (C) 2014 Mukesh Y authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.robotium.actionbartest;

import junit.framework.TestSuite;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;

/**
 * @author Mukesh Y
 */
public class AllTests extends  ActivityInstrumentationTestCase2 {
 
 

 public AllTests(Class activityClass) {
  super(activityClass);
 }

 public static TestSuite suite() {
  TestSuite t = new TestSuite();
  t.addTestSuite(MainActivityTest.class);
  t.addTestSuite(MapActivityTest.class);
  
  return t; 
 }
 
 @Override
 public void setUp() throws Exception {
  
 }
 
 
 @Override
 public void tearDown() throws Exception {
 }

}


Download Code From Here
Enjoy Coding...  :)

Tuesday 25 March 2014

Android Google TV Setup | Android Google TV Development -Part 1


Hello Friends,
                 Hello android Guys as we as we Google launches three new
future last moth
Android | Google awesome features :
1. Android L Developer Preview
2. Android Wear SDK
3. Android TV Preview SDK
4. Google glass

                 Here, I am going to share my first android blog on Google TV.This blog  helps you in making Android Google TV app.
The Google TV developers released a Google TV add-on for the Android SDK which helps android developer in creating the Android Google TV Application easily.

Steps:

1.Installing the Add-On for Google TV :
        a) Open the Sdk manager
        b) Expand Api level-13 or Android 3.2 and  check, there will be
             "Google TV Addon"
        c) select it and click on install. See below image for help
        d) Also Install the "Intel Atom x86 System Image" which is 
             available in under Android 2.3.3 and Android 3.2.
 


2. Creating the  "Google TV Emulator " for running and testing the app:
      1, Open AVD manager
      2.  Select "Device Definitions" tab from top
      3.  Create an "New Device"

     Note : 
            -For 1080p use a resolution of 1920×1080 and a density of xhdpi.
            -For 720p use a resolution of 1080×720 with a density of tvdpi.       

   

        4. Now Create Google TV Emulator :
           


           Note: You may also face the following issue while creating the Google TV AVD
               1.   Install the Intel x86 System Image
               2.   Hax is not working and emulator runs in emulation mode

   
    Refer link : https://developers.google.com/tv/android/docs/gtv_addon


    Hope, this will helps some one.
    Enjoy Coding..  Cheers...   :)

Thursday 20 March 2014

Creating and Storing Log File on device in Android


Hello Friends,
        Today, I am sharing another android tutorial which helps you in Creating
and Storing Log File in your android phone.


1. MainActivity.java
package com.example.logfileimplementation;

import java.io.File;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
 
 public static final String SDCARD = String.valueOf(Environment
   .getExternalStorageDirectory());
 TextView mTextView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  try {
  deleteLog();
  setContentView(R.layout.activity_main);
  createAppDirectories();
  mTextView = (TextView) findViewById(R.id.action_settings);
  mTextView.setText("Android crash Reporter");
  } catch(Exception ex) {
   Utilities.writeIntoLog(Log.getStackTraceString(ex));
  }
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

 // Creating App Directory For Log File
 private void createAppDirectories() {
  System.out.println("hiii");
  File dir1 = new File(Utilities.APP_DIR);
  if (!dir1.exists()) {
   dir1.mkdir();
  }
 }

 // Deleting App Directory which is used for Log File
 private void deleteLog() {

  File log = new File(Utilities.LOG_FILE_PATH);
  if (log.exists()) {
   log.delete();
  }
 }
}

2. Utilities.java
package com.example.logfileimplementation;

import java.io.BufferedWriter;
import java.io.FileWriter;


public class Utilities {
 public static String APP_DIR = MainActivity.SDCARD+"/Logfile";
 public static String LOG_FILE_PATH = APP_DIR+"/ myapp_log.txt";  
 
 
 
 public static void writeIntoLog(String data) 
 {
   
  FileWriter fw = null;    
  try {
   
   fw = new FileWriter(LOG_FILE_PATH , true);
   BufferedWriter buffer = new BufferedWriter(fw);   
   buffer.append(data+"\n");
    
   buffer.close();

  } catch (Exception e) { 
   e.printStackTrace();
  }
   
 }  
}

3. activity_main.xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >



    <TextView

        android:id="@+id/textView"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world" />

  

</RelativeLayout>
4. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.logfileimplementation"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.logfileimplementation.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Hope this will help you.
Enjoy Coding. Cheers.... :)

Tuesday 18 March 2014

"Collect preferences failed" eclipse ADT error | You may have an "No repository found error"


Hello Droid Guys,
                           After updating the sdk manager to latest sdk i.e version 22.6.
           


I am start getting following error: 
[2014-03-18 13:12:03 - Framework Resource Parser] Collect preferences failed, class java/lang/AutoCloseable not found in D:\Android-Eclipse\Eclipse and ADT\android-sdk\platforms\android-19\android.jar

Then I found the solution by updating the Eclipse ADT plugin.
1. go Help | Install New Sofware
2. select "Android Developer Tools Update Site - http://dl-ssl.google.com/android/eclipse/"
3. press "Select All"
4. press "Finish"

Note : While doing above steps I faced other issue i.e:
    You may have an "No repository found error" while installing the tools.

Then I do following tweak I removed the http://dl-ssl.google.com/android/eclipse/ site and then re-added it, then everything downloaded fine.

Hope, this will helps some one.
Enjoy Coding :)


Thursday 13 March 2014

Android Robotium Test -run robotium tests in a specific order

Hello Friends,
                         This is very common scenario when you are running any testsuits. It
by default runs in alphabetical order. I too faces the same problem while writing the
test case using Robotium.

In my case I want to execute the testcase in following order :
MainLoginScreenTest -> EmailSignUpScreenTest -> EmailLoginScreenTest

But it actually runs in alphabetical order like,
 EmailLoginScreenTest -> EmailSignUpScreenTest - > MainLoginScreenTest

Then I follow this link and find the way to come out from this problem. Here is
my code.

1. AllTests.java
package com.android.test;
import junit.framework.TestSuite;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;

public class AllTests extends 
        ActivityInstrumentationTestCase2<Activity>{
 
 public AllTests(Class activityClass) {
  super(activityClass);
 }

 public static TestSuite suite() {
  TestSuite t = new TestSuite();
  t.addTestSuite(MainLoginScreenTest.class);
  t.addTestSuite(EmailSignUpScreenTest.class);
  t.addTestSuite(EmailLoginScreenTest.class);
  
  return t; 
 }
 
 @Override
 public void setUp() throws Exception {
  
 }
 
 
 @Override
 public void tearDown() throws Exception {
 }

}


2.MainLoginScreenTest.java

package com.android.test;

import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.ImageButton;

import com.android.Login.EmailSignUpScreen;
import com.android.Login.MainLoginScreen;
import com.android.android.R;
import com.robotium.solo.Solo;

public class MainLoginScreenTest extends
          ActivityInstrumentationTestCase2<MainLoginScreen> {
 
 private Solo solo;
 private Activity activity;
 
 public MainLoginScreenTest() {
  super(MainLoginScreen.class);
  // TODO Auto-generated constructor stub
 }
 
 @Override
 public void setUp() throws Exception {
  //setUp() is run before a test case is started. 
  //This is where the solo object is created.
  this.activity = this.getActivity();
  this.solo = new Solo(getInstrumentation(), this.activity);
 }
 
 
 @Override
 public void tearDown() throws Exception {
       solo.finishOpenedActivities();
 }

 public void testDisplay() throws Exception {
   solo.waitForActivity(MainLoginScreen.class);
   ImageButton emailLogin = (ImageButton) this.solo.getView(R.id.btn_email_login);
   assertEquals(emailLogin.getId(), R.id.btn_email_login);
   this.solo.clickOnImageButton(1);
   this.solo.waitForActivity(EmailSignUpScreen.class, 1000);
   assertEquals(EmailSignUpScreen.class, solo.getCurrentActivity().getClass());
   //this.solo.goBack();
 }
}


3.EmailSignUpScreenTest.java

package com.android.test;

import junit.framework.Test;
import junit.framework.TestSuite;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.MediumTest;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;

import com.android.Login.EmailLoginScreen;
import com.android.Login.EmailSignUpScreen;
import com.android.android.R;
import com.robotium.solo.Solo;

public class EmailSignUpScreenTest extends 
           ActivityInstrumentationTestCase2<EmailSignupScreen>{

 private Solo solo;
 private Activity activity;
 
 public EmailSignUpScreenTest() {
  super(EmailSignUpScreen.class);
 }
 public EmailSignUpScreenTest(String name) {
  super(EmailSignUpScreen.class);
  setName(name);
 }
 
 public static final Test suite(  ) {
   TestSuite suite = new TestSuite();
   suite.addTest(new TestSuite(EmailSignUpScreen.class));
   suite.addTest(new TestSuite(EmailLoginScreen.class));
   return suite;
   }

 @Override
 public void setUp() throws Exception {
  //setUp() is run before a test case is started. 
  //This is where the solo object is created.
  this.activity = this.getActivity();
  this.solo = new Solo(getInstrumentation(), this.activity);
 }
 
 @Override
 public void tearDown() throws Exception {
       solo.finishOpenedActivities();
 }

 public void testDisplay() throws Exception {
  String fName = "Sam";
  String lName = "Joshi";
  String email = "sam@gmail.com";
  String password = "abc123";
  String dob = "03-11-2014";
  String zipcod = "201301";
    
  this.solo.typeText((EditText) this.activity.findViewById(R.id.edt_first_name), fName);
  //this.solo.enterText((EditText) this.activity.findViewById(R.id.edt_last_name), lName);
  this.solo.typeText((EditText) this.activity.findViewById(R.id.edt_email), email);
  this.solo.typeText((EditText) this.activity.findViewById(R.id.edt_password), password);
  this.solo.typeText((EditText) this.activity.findViewById(R.id.edt_confirm_password), password);
  this.solo.enterText((EditText) this.activity.findViewById(R.id.edt_birth_date), dob);
  RadioButton rb = (RadioButton) solo.getView(R.id.rb_female);
  solo.clickOnView(rb);
  this.solo.typeText((EditText) this.activity.findViewById(R.id.edt_zip_code), zipcod);
  //Click on the button named "Sign up".
  this.solo.clickOnButton("Sign Up");
  //this.solo.w
  //Check to see if the given text is displayed.
  //assertTrue(this.solo.searchText(text));
 }
 
 @MediumTest
 public void testStartEmailLoginScreen() throws Exception {     
   this.solo.waitForActivity(EmailSignUpScreen.class); 
   TextView tvSignIn = (TextView) this.activity.findViewById(R.id.sign_in_label);
   String text = tvSignIn.getText().toString();
   this.solo.waitForText(text);
   this.solo.clickOnText(text);
   this.solo.waitForActivity(EmailLoginScreen.class, 1000);
   assertTrue(solo.waitForActivity(EmailLoginScreen.class));
 }
}

4.EmailLoginScreenTest.java
package com.android.test;

import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.EditText;

import com.android.Login.EmailLoginScreen;
import com.android.android.R;
import com.robotium.solo.Solo;

public class EmailLoginScreenTest extends
        ActivityInstrumentationTestCase2<EmailLoginScreen>{

 private Solo solo;
 private Activity activity;
 
 public EmailLoginScreenTest() {
  super(EmailLoginScreen.class);
 }

 @Override
 public void setUp() throws Exception {
  //setUp() is run before a test case is started. 
  //This is where the solo object is created.
  this.activity = this.getActivity();
  this.solo = new Solo(getInstrumentation(), this.activity);
 }
 
 
 @Override
 public void tearDown() throws Exception {
       solo.finishOpenedActivities();
 }

 public void testDisplay() throws Exception {
  String email = "mukesh@gmail.com";
  String password = "abc123";
  
  
  this.solo.typeText((EditText) this.activity.findViewById(R.id.edt_login_email), email);
  //this.solo.enterText((EditText) this.activity.findViewById(R.id.edt_login_password), password);
  //Click on the button named "Sign up".
  this.solo.clickOnButton("Login");
  this.solo.waitForActivity(EmailLoginScreen.class, 2000);
  //Check to see if the given text is displayed.
  //assertTrue(this.solo.searchText(text));
 }
}


Note: Right click on AllTests.java and choose Run As-> Android Junit test ->
               select AllTests>java file.

Hope this post is helpful for some one.
Enjoy Coding......  :)

Friday 7 March 2014

java.lang.RuntimeException: Stub! in Robolectric


Hello Droid Friends,
                              Have you facing following error while running a test case using
Roboelectric and Junit-4.

java.lang.RuntimeException: Stub!
at android.content.Context.<init>(Context.java:4)
at android.content.ContextWrapper.<init>(ContextWrapper.java:5)
at android.view.ContextThemeWrapper.<init>(ContextThemeWrapper.java:5)
at android.app.Activity.<init>(Activity.java:6)
at com.actionbarsherlock.app.SherlockActivity.<init>(SherlockActivity.java:21)
at com.opttown.OptTown.DrawerBaseActivity.<init>(DrawerBaseActivity.java:34)
at com.opttown.Places.MyPlaces.<init>(MyPlaces.java:63)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.fest.reflect.constructor.Invoker.newInstance(Invoker.java:77)
at org.robolectric.util.ActivityController.<init>(ActivityController.java:47)
at org.robolectric.Robolectric.buildActivity(Robolectric.java:1409)
at com.opttown.test.MyPlacesTest.setUp(MyPlacesTest.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


Most of stub!  exceptions are because the tests are not annotated with the correct TestRunner. For example in my case I forgot to add:
@RunWith(RobolectricTestRunner.class)

After adding the above annotation the above issue will be fixed.


import static org.junit.Assert.assertNotNull;
import static org.robolectric.Robolectric.shadowOf;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowActivity;

import android.content.Context;

import com.android.Places.MyPlaces;

@RunWith(RobolectricTestRunner.class)
public class MyPlacesTest {
 
 private MyPlaces activity;
 Context ctx;
 ShadowActivity shadowActivity;
 
 @Before
 public void setUp() throws Exception {
  activity = Robolectric.buildActivity(MyPlaces.class)
                .create()
                .get();
  shadowActivity = shadowOf(activity);
  ctx = activity;
 }
 
 /**
   * @testdox: for activity instance test 
   * given: 
   * when:  app launch
   * then: checking the instance of activity
   */
  @Test
  @Config(reportSdk = 10)
  public void testActivityInstance() {
   assertNotNull(shadowActivity.getApplicationContext());
   Assert.assertEquals("Result",activity.getApplicationContext(),sh                       adowActivity.getApplicationContext());
  }



Hope this will help you during writing the test case for your android project.



Enjoy Coding... :) 

You may also Read this:
1. Roboelectric setup with eclipse
2. R
oboelectric AndroidManifest.xml not found error
3. Roboelectric tutorial
4. Asserting Toast message using Robolectric
.

 

Copyright @ 2013 Android Developers Blog.