SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
An Intertech Course
Robotium Tutorial
Mobile March
March 21, 2013
By Jim White, Intertech, Inc..
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 2
Stop by Intertech’s
booth for a chance to
win FREE Training.
Or go to bit.ly.com/intertech-login
Slides & demo code available at intertech.com/blog
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 3
Session Agenda
• Robotium…
• What is it?
• Where to get it and how to set it up
• “Normal” Android unit testing background
• Why Robotium is needed
• Using Robotium
• Robotium Tips/Tricks/Issues
• Complimentary tools
• Further Resources
• Q&A
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 4
Purpose
• The main point/purpose to my talk…
• There are wonderful test/QA tools available for Android!
• There are no excuses for skipping unit testing in Android!
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 5
Jim White Intro
• Intertech Partner,
• Dir. of Training,
• Instructor,
• Consultant
• Co-author, J2ME, Java in Small
Things (Manning)
• Device developer since before
phones were “smart”
• Java developer when “spring”
and “struts” described your
stride
• Occasional beer drinker
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 6
Robotium – what is it?
• An open source test framework
• Used to write black or white box tests (emphasis is on black box)
• White box testing – testing software that knows and tests the internal
structures or workings of an application
• Black box testing – testing software functionality without knowledge of
an application (perhaps where the source code is not even available)
• Tests can be executed on an Android Virtual Device (AVD) or real
device
• Built on Java (and Android) and JUnit (the Android Test Framework)
• In fact, it may be more appropriate to call Robotium an extension to the
Android test framework
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 7
Robotium Project Setup
• Prerequisites
• Install and setup JDK
• Install and setup Eclipse (optional)
• Install and setup Android Standard Development Kit (SDK)
• Supports Android 1.6 (API level 4) and above
• Install and setup Android Development Tools (ADT) for Eclipse (optional)
• Create Android AVD or attach device by USB
• Create an Android Test Project
• Download Robotium JAR and add to project classpath
• robotium-solo-X.X.jar (version 3.6 the latest as of this writing)
• From code.google.com/p/robotium/downloads/list
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 8
Background - Android JUnit Testing
• Android testing is based on JUnit
• You create test suites, classes (test cases), methods
• Organize tests into a Android Test project
• Android API supports JUnit 3 code style – not JUnit 4!
• No annotations
• Old JUnit naming conventions
• Test case classes can extend good-old-fashion JUnit3 TestCase
• To call Android APIs, base class must extend AndroidTestCase
• Use JUnit Assert class to check/display test results
• Execute tests using an SDK provided InstrumentationTestRunner
• android.test.InstrumentationTestRunner
• Usually handled automatically via IDE
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 9
Android Test Architecture
• Architecturally, the unit testing project and app project run on the
same JVM (i.e. DVM).
Test case classes,
instrumentation, JUnit,
mock objects, etc.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 10
Robotium Project Setup
• Add Robotium JAR to the Java
Build Path
• Put Robotium in the build path
order.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 11
Android JUnit Project Setup
Demo
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 12
The “App” Used To Demo Today
• Want to make sure data is
entered.
• Want to make sure data is
valid.
• Age is less than 122
• Zip has 5 characters
• Make sure a role is clicked.
• Make sure clear does clear the
fields.
• Etc.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 13
Example JUnit Test (Continued)
public class TestDataCollection extends ActivityInstrumentationTestCase2<DataCollectionActivity> {
DataCollectionActivity activity;
public TestDataCollection() {
super(DataCollectionActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
@Override
protected void tearDown() throws Exception {
activity.finish();
super.tearDown();
}
Extends AndroidTestCase –
provides functionality for testing a
single Activity. Need to associate it
to an Activity type (like
DataCollectionActivity)
Test case initialization method (just
like JUnit 3).
Test case tear down method (just
like JUnit 3).
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 14
Example JUnit Test (Continued)
public void testCheckNameClear() {
final EditText name = (EditText) activity.findViewById(R.id.nameEdit);
activity.runOnUiThread(new Runnable() {
public void run() {
name.requestFocus();
}
});
sendKeys("J I M");
Button button = (Button) activity.findViewById(R.id.clearButton);
TouchUtils.clickView(this, button);
assertTrue("First name field is not empty.", name.getText().toString().equals(""));
}
}
Grab widgets by
their Android ID.
Test methods must
begin with “test”.
UI adjustments/ work must
be done on UI thread
TestCase,
TouchUtils
provide limited UI
maneuvering, but
again requires
deep knowledge
of the UI details
Normal assert methods to
check results.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 15
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 16
Why Android JUnit Isn’t Enough
• Requires deep knowledge of widgets
• Widget IDs
• Widget Properties
• What has focus
• Order of widgets
• Etc.
• Often requires deep knowledge of Android internals
• Especially around menus, dialogs, etc.
• Makes for brittle unit tests
• As the UI changes, the test often must change dramatically.
• Poor instrumentation
• Instrumentation is a feature in which specific monitoring of the interactions
between an application and the system are made possible.
• Use of runOnUIThread to execute UI work that isn’t covered by TouchUtils or
TestCase class.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 17
Example Robotium
• Use Robotium tests in JUnit test class
• Same code as in TestDataCollectionActivity above…
• With a few additions/changes.
private Solo solo;
@Override
public void setUp() throws Exception {
super.setUp();
activity = getActivity();
solo= new Solo(getInstrumentation(), getActivity());
}
Add a Solo member
variable and initialize it
during setUp( ).
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 18
Example Robotium (Continued)
• The new test method – greatly simplified via Robotium!
public void testCheckNameClear() {
solo.enterText(0, "Jim"); // 0 is the index of the EditText field
solo.clickOnButton("Clear");
assertTrue("First name field is not empty.",solo.getEditText(0).
getText().toString().equals(""));
}
Solo methods allow
widgets to be selected
and interacted with.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 19
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 20
Robotium Solo API
• Robotium is all baked into one class - Solo – with many methods:
• clickX methods: clickOnButton, clickOnImage, clickOnText,…
• clickLongX methods: clickLongInList, clickLongOnScreen,
clickLongOnText,…
• enterText
• drag
• getX methods: getButton, getCurrentActivity, getImage, getEditText, …
• goBack
• isX methods: isCheckBoxChecked, isRadioButtonChecked,
isSpinnerTextSelected, isTextChecked,…
• pressX methods: pressMenuItem, pressMenuItem, pressSpinnerItem, …
• scrollX methods: scrollToTop, scrollToBottom, …
• searchX methods: searchButton, searchEditText, searchText, …
• waitForX methods: waitForActivity, waitForText, …
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 21
Android Robotium Demo
Demo
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 22
Tips & Tricks
• Robotium (and all JUnit tests) operate in the same process (DVM) as
the original app
• Robotium only works with the activities and views within the defined app
• For example: Can’t use intent to launch another app and test activity
work from that app
• The popup keyboard is accomplished with a bitmap in Android
• Robotium (or any unit test software) doesn’t see the “keys” as buttons or
anything.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 23
Tips & Tricks (Continued)
• Use waitFor methods liberally.
• Especially if new screen opens or changes to what is displayed are
occurring.
• The waitFor methods tell Robotium to wait for a condition to happen
before the execution continues.
public void testGoodLogin() {
solo.enterText(0, “username");
solo.enterText(1, “password");
String label = res.getString(R.string.login_button_label);
solo.clickOnButton(label);
String title = res.getString(R.string.title_activity_systemv);
solo.waitForText(title);
solo.assertCurrentActivity("systemv", SystemVActivity.class);
solo.getCurrentActivity().finish();
}
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 24
Tips & Tricks (Continued)
• RadioButtons are Buttons, EditText are Text, etc…
• Getting the proper widget by index can be more difficult
• Use of index also makes the test case more brittle due to potential layout
changes
• Consider clickOnButton(“Clear”) vs.
clickOnButton(6)
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 25
Tips & Tricks (Continued)
• Resources in Android are at a premium (especially when test cases
and App code are running in same DVM).
• Use solo.finishOpenedActivities() in your tearDown method.
• It closes all the opened activities.
• Frees resources for the next tests
• Robotium has some difficulty with animations
• Robotium doesn’t work with status bar notifications
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 26
Tips & Tricks – Black Box Testing
• Black Box Testing (when all you have is the APK file) is a little more
tricky.
• Recall in the demo, the test application wants the main activity name?
public TestDataCollectionActivity() {
super(DataCollectionActivity.class);
}
• You may not know this for a 3rd party/black box app.
• You can get the activity name by loading the APK to an AVD or device,
running it, and watching the logcat.
• The APK file has to have the same certificate signature as the test
project.
• Probably have to delete the signature and then resign the APK with the
Android debug key signature.
• It’s easier than it sounds. See referenced document for help.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 27
Android Robotium Black Box Demo
Black Box
Demo
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 28
Robotium Additional Features
• Robotium can automatically take screenshots
• solo.takeScreenshot( )
• Robotium can be run from the command line (using adb shell)
• adb shell am instrument -w
com.android.foo/android.test.InstrumentationTestRunner
• Robotium can test with localized strings
• solo.getString(localized_resource_string_id)
• Code coverage is a bit lackluster at this time
• Can be done with special ant task and command line tools
• Robotium does not work on Flash or Web apps.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 29
Complimentary Tools
• Robotium Testroid Recorder
• Record actions to generate Android JUnit/Robotium test cases
• Run tests on 180 devices “in the cloud”
• Testdroid.com
• Commercial product (50 runs free, $99/month or ¢99/run)
• Robotium Remote Control
• Allows Robotium test cases to be executed from the JVM (on a PC)
• This allows Robotium to work with JUnit 4.
• code.google.com/p/robotium/wiki/RemoteControl
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 30
Resources
• These slides and demo code: intertech.com/blog
• Google Robotium site
• code.google.com/p/robotium
• code.google.com/p/robotium/wiki/RobotiumTutorials
• Tutorial Articles/Blog Posts
• devblog.xing.com/qa/robotium-atxing/
• www.netmagazine.com/tutorials/automate-your-android-app-testing
• robotiumsolo.blogspot.com/2012/12/what-is-robotium.html
• www.vogella.com/articles/AndroidTesting/article.html
• robotium.googlecode.com/files/RobotiumForBeginners.pdf
• excellent article for black box testing when all you have is the APK
• Fundamentals of Android Unit Testing
• developer.android.com/tools/testing/testing_android.html
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 31
Q&A
• Questions – you got’em, I want’em
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 32
Award-Winning Training and Consulting.
Visit www.Intertech.com for complete details.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 33
Intertech offers
Mobile Training On:
• Android
• HTML5
• iOS
• Java ME
• jQuery
• Windows Phone
Visit ww.Intertech.com for complete course schedule.
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 34
Stop by Intertech’s
booth for a chance to
win FREE Training.
Or go to bit.ly.com/intertech-login

Más contenido relacionado

Similar a Introduction to Robotium

Modeveast Appcelerator Presentation
Modeveast Appcelerator PresentationModeveast Appcelerator Presentation
Modeveast Appcelerator Presentation
Aaron Saunders
 
Best Practices in Widget Development - Examples and Counterexamples
Best Practices in Widget Development  - Examples and CounterexamplesBest Practices in Widget Development  - Examples and Counterexamples
Best Practices in Widget Development - Examples and Counterexamples
ROLE Project
 
Mastering Mobile Test Automation with Appium
Mastering Mobile Test Automation with AppiumMastering Mobile Test Automation with Appium
Mastering Mobile Test Automation with Appium
Perfecto by Perforce
 

Similar a Introduction to Robotium (20)

Modeveast Appcelerator Presentation
Modeveast Appcelerator PresentationModeveast Appcelerator Presentation
Modeveast Appcelerator Presentation
 
Is TDD dead or alive?
Is TDD dead or alive?Is TDD dead or alive?
Is TDD dead or alive?
 
LDNSE: Testdroid for Mobile App and Web Testing (London Selenium Meetup)
LDNSE: Testdroid for Mobile App and Web Testing (London Selenium Meetup)LDNSE: Testdroid for Mobile App and Web Testing (London Selenium Meetup)
LDNSE: Testdroid for Mobile App and Web Testing (London Selenium Meetup)
 
Getting Started with XCTest and XCUITest for iOS App Testing
Getting Started with XCTest and XCUITest for iOS App TestingGetting Started with XCTest and XCUITest for iOS App Testing
Getting Started with XCTest and XCUITest for iOS App Testing
 
Rockstar Android Testing (Mobile TechCon Munich 2014)
Rockstar Android Testing (Mobile TechCon Munich 2014)Rockstar Android Testing (Mobile TechCon Munich 2014)
Rockstar Android Testing (Mobile TechCon Munich 2014)
 
Guide to the jungle of testing frameworks
Guide to the jungle of testing frameworksGuide to the jungle of testing frameworks
Guide to the jungle of testing frameworks
 
Utilizando expresso uiautomator na automacao de testes em apps android
Utilizando expresso uiautomator na automacao de testes em apps androidUtilizando expresso uiautomator na automacao de testes em apps android
Utilizando expresso uiautomator na automacao de testes em apps android
 
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...
 
Android - Open Source Bridge 2011
Android - Open Source Bridge 2011Android - Open Source Bridge 2011
Android - Open Source Bridge 2011
 
Mini training - Moving to xUnit.net
Mini training - Moving to xUnit.netMini training - Moving to xUnit.net
Mini training - Moving to xUnit.net
 
Unit Test Android Without Going Bald
Unit Test Android Without Going BaldUnit Test Android Without Going Bald
Unit Test Android Without Going Bald
 
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
 
Test studio
Test studioTest studio
Test studio
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
Breaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit TestingBreaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit Testing
 
Best Practices in Widget Development - Examples and Counterexamples
Best Practices in Widget Development  - Examples and CounterexamplesBest Practices in Widget Development  - Examples and Counterexamples
Best Practices in Widget Development - Examples and Counterexamples
 
Real World Asp.Net WebApi Applications
Real World Asp.Net WebApi ApplicationsReal World Asp.Net WebApi Applications
Real World Asp.Net WebApi Applications
 
Testing on Android
Testing on AndroidTesting on Android
Testing on Android
 
Mastering Mobile Test Automation with Appium
Mastering Mobile Test Automation with AppiumMastering Mobile Test Automation with Appium
Mastering Mobile Test Automation with Appium
 
Unlocking the Power of ChatGPT and AI in Testing - NextSteps, presented by Ap...
Unlocking the Power of ChatGPT and AI in Testing - NextSteps, presented by Ap...Unlocking the Power of ChatGPT and AI in Testing - NextSteps, presented by Ap...
Unlocking the Power of ChatGPT and AI in Testing - NextSteps, presented by Ap...
 

Introduction to Robotium

  • 1. An Intertech Course Robotium Tutorial Mobile March March 21, 2013 By Jim White, Intertech, Inc..
  • 2. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 2 Stop by Intertech’s booth for a chance to win FREE Training. Or go to bit.ly.com/intertech-login Slides & demo code available at intertech.com/blog
  • 3. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 3 Session Agenda • Robotium… • What is it? • Where to get it and how to set it up • “Normal” Android unit testing background • Why Robotium is needed • Using Robotium • Robotium Tips/Tricks/Issues • Complimentary tools • Further Resources • Q&A
  • 4. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 4 Purpose • The main point/purpose to my talk… • There are wonderful test/QA tools available for Android! • There are no excuses for skipping unit testing in Android!
  • 5. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 5 Jim White Intro • Intertech Partner, • Dir. of Training, • Instructor, • Consultant • Co-author, J2ME, Java in Small Things (Manning) • Device developer since before phones were “smart” • Java developer when “spring” and “struts” described your stride • Occasional beer drinker
  • 6. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 6 Robotium – what is it? • An open source test framework • Used to write black or white box tests (emphasis is on black box) • White box testing – testing software that knows and tests the internal structures or workings of an application • Black box testing – testing software functionality without knowledge of an application (perhaps where the source code is not even available) • Tests can be executed on an Android Virtual Device (AVD) or real device • Built on Java (and Android) and JUnit (the Android Test Framework) • In fact, it may be more appropriate to call Robotium an extension to the Android test framework
  • 7. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 7 Robotium Project Setup • Prerequisites • Install and setup JDK • Install and setup Eclipse (optional) • Install and setup Android Standard Development Kit (SDK) • Supports Android 1.6 (API level 4) and above • Install and setup Android Development Tools (ADT) for Eclipse (optional) • Create Android AVD or attach device by USB • Create an Android Test Project • Download Robotium JAR and add to project classpath • robotium-solo-X.X.jar (version 3.6 the latest as of this writing) • From code.google.com/p/robotium/downloads/list
  • 8. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 8 Background - Android JUnit Testing • Android testing is based on JUnit • You create test suites, classes (test cases), methods • Organize tests into a Android Test project • Android API supports JUnit 3 code style – not JUnit 4! • No annotations • Old JUnit naming conventions • Test case classes can extend good-old-fashion JUnit3 TestCase • To call Android APIs, base class must extend AndroidTestCase • Use JUnit Assert class to check/display test results • Execute tests using an SDK provided InstrumentationTestRunner • android.test.InstrumentationTestRunner • Usually handled automatically via IDE
  • 9. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 9 Android Test Architecture • Architecturally, the unit testing project and app project run on the same JVM (i.e. DVM). Test case classes, instrumentation, JUnit, mock objects, etc.
  • 10. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 10 Robotium Project Setup • Add Robotium JAR to the Java Build Path • Put Robotium in the build path order.
  • 11. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 11 Android JUnit Project Setup Demo
  • 12. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 12 The “App” Used To Demo Today • Want to make sure data is entered. • Want to make sure data is valid. • Age is less than 122 • Zip has 5 characters • Make sure a role is clicked. • Make sure clear does clear the fields. • Etc.
  • 13. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 13 Example JUnit Test (Continued) public class TestDataCollection extends ActivityInstrumentationTestCase2<DataCollectionActivity> { DataCollectionActivity activity; public TestDataCollection() { super(DataCollectionActivity.class); } @Override public void setUp() throws Exception { super.setUp(); activity = getActivity(); } @Override protected void tearDown() throws Exception { activity.finish(); super.tearDown(); } Extends AndroidTestCase – provides functionality for testing a single Activity. Need to associate it to an Activity type (like DataCollectionActivity) Test case initialization method (just like JUnit 3). Test case tear down method (just like JUnit 3).
  • 14. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 14 Example JUnit Test (Continued) public void testCheckNameClear() { final EditText name = (EditText) activity.findViewById(R.id.nameEdit); activity.runOnUiThread(new Runnable() { public void run() { name.requestFocus(); } }); sendKeys("J I M"); Button button = (Button) activity.findViewById(R.id.clearButton); TouchUtils.clickView(this, button); assertTrue("First name field is not empty.", name.getText().toString().equals("")); } } Grab widgets by their Android ID. Test methods must begin with “test”. UI adjustments/ work must be done on UI thread TestCase, TouchUtils provide limited UI maneuvering, but again requires deep knowledge of the UI details Normal assert methods to check results.
  • 15. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 15
  • 16. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 16 Why Android JUnit Isn’t Enough • Requires deep knowledge of widgets • Widget IDs • Widget Properties • What has focus • Order of widgets • Etc. • Often requires deep knowledge of Android internals • Especially around menus, dialogs, etc. • Makes for brittle unit tests • As the UI changes, the test often must change dramatically. • Poor instrumentation • Instrumentation is a feature in which specific monitoring of the interactions between an application and the system are made possible. • Use of runOnUIThread to execute UI work that isn’t covered by TouchUtils or TestCase class.
  • 17. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 17 Example Robotium • Use Robotium tests in JUnit test class • Same code as in TestDataCollectionActivity above… • With a few additions/changes. private Solo solo; @Override public void setUp() throws Exception { super.setUp(); activity = getActivity(); solo= new Solo(getInstrumentation(), getActivity()); } Add a Solo member variable and initialize it during setUp( ).
  • 18. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 18 Example Robotium (Continued) • The new test method – greatly simplified via Robotium! public void testCheckNameClear() { solo.enterText(0, "Jim"); // 0 is the index of the EditText field solo.clickOnButton("Clear"); assertTrue("First name field is not empty.",solo.getEditText(0). getText().toString().equals("")); } Solo methods allow widgets to be selected and interacted with.
  • 19. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 19
  • 20. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 20 Robotium Solo API • Robotium is all baked into one class - Solo – with many methods: • clickX methods: clickOnButton, clickOnImage, clickOnText,… • clickLongX methods: clickLongInList, clickLongOnScreen, clickLongOnText,… • enterText • drag • getX methods: getButton, getCurrentActivity, getImage, getEditText, … • goBack • isX methods: isCheckBoxChecked, isRadioButtonChecked, isSpinnerTextSelected, isTextChecked,… • pressX methods: pressMenuItem, pressMenuItem, pressSpinnerItem, … • scrollX methods: scrollToTop, scrollToBottom, … • searchX methods: searchButton, searchEditText, searchText, … • waitForX methods: waitForActivity, waitForText, …
  • 21. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 21 Android Robotium Demo Demo
  • 22. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 22 Tips & Tricks • Robotium (and all JUnit tests) operate in the same process (DVM) as the original app • Robotium only works with the activities and views within the defined app • For example: Can’t use intent to launch another app and test activity work from that app • The popup keyboard is accomplished with a bitmap in Android • Robotium (or any unit test software) doesn’t see the “keys” as buttons or anything.
  • 23. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 23 Tips & Tricks (Continued) • Use waitFor methods liberally. • Especially if new screen opens or changes to what is displayed are occurring. • The waitFor methods tell Robotium to wait for a condition to happen before the execution continues. public void testGoodLogin() { solo.enterText(0, “username"); solo.enterText(1, “password"); String label = res.getString(R.string.login_button_label); solo.clickOnButton(label); String title = res.getString(R.string.title_activity_systemv); solo.waitForText(title); solo.assertCurrentActivity("systemv", SystemVActivity.class); solo.getCurrentActivity().finish(); }
  • 24. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 24 Tips & Tricks (Continued) • RadioButtons are Buttons, EditText are Text, etc… • Getting the proper widget by index can be more difficult • Use of index also makes the test case more brittle due to potential layout changes • Consider clickOnButton(“Clear”) vs. clickOnButton(6)
  • 25. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 25 Tips & Tricks (Continued) • Resources in Android are at a premium (especially when test cases and App code are running in same DVM). • Use solo.finishOpenedActivities() in your tearDown method. • It closes all the opened activities. • Frees resources for the next tests • Robotium has some difficulty with animations • Robotium doesn’t work with status bar notifications
  • 26. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 26 Tips & Tricks – Black Box Testing • Black Box Testing (when all you have is the APK file) is a little more tricky. • Recall in the demo, the test application wants the main activity name? public TestDataCollectionActivity() { super(DataCollectionActivity.class); } • You may not know this for a 3rd party/black box app. • You can get the activity name by loading the APK to an AVD or device, running it, and watching the logcat. • The APK file has to have the same certificate signature as the test project. • Probably have to delete the signature and then resign the APK with the Android debug key signature. • It’s easier than it sounds. See referenced document for help.
  • 27. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 27 Android Robotium Black Box Demo Black Box Demo
  • 28. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 28 Robotium Additional Features • Robotium can automatically take screenshots • solo.takeScreenshot( ) • Robotium can be run from the command line (using adb shell) • adb shell am instrument -w com.android.foo/android.test.InstrumentationTestRunner • Robotium can test with localized strings • solo.getString(localized_resource_string_id) • Code coverage is a bit lackluster at this time • Can be done with special ant task and command line tools • Robotium does not work on Flash or Web apps.
  • 29. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 29 Complimentary Tools • Robotium Testroid Recorder • Record actions to generate Android JUnit/Robotium test cases • Run tests on 180 devices “in the cloud” • Testdroid.com • Commercial product (50 runs free, $99/month or ¢99/run) • Robotium Remote Control • Allows Robotium test cases to be executed from the JVM (on a PC) • This allows Robotium to work with JUnit 4. • code.google.com/p/robotium/wiki/RemoteControl
  • 30. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 30 Resources • These slides and demo code: intertech.com/blog • Google Robotium site • code.google.com/p/robotium • code.google.com/p/robotium/wiki/RobotiumTutorials • Tutorial Articles/Blog Posts • devblog.xing.com/qa/robotium-atxing/ • www.netmagazine.com/tutorials/automate-your-android-app-testing • robotiumsolo.blogspot.com/2012/12/what-is-robotium.html • www.vogella.com/articles/AndroidTesting/article.html • robotium.googlecode.com/files/RobotiumForBeginners.pdf • excellent article for black box testing when all you have is the APK • Fundamentals of Android Unit Testing • developer.android.com/tools/testing/testing_android.html
  • 31. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 31 Q&A • Questions – you got’em, I want’em
  • 32. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 32 Award-Winning Training and Consulting. Visit www.Intertech.com for complete details.
  • 33. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 33 Intertech offers Mobile Training On: • Android • HTML5 • iOS • Java ME • jQuery • Windows Phone Visit ww.Intertech.com for complete course schedule.
  • 34. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 34 Stop by Intertech’s booth for a chance to win FREE Training. Or go to bit.ly.com/intertech-login