1. TESTING ANDROID
Marc Chung
OpenRain
marc.chung@openrain.com
Friday, August 28, 2009 1
2. Agenda
Introduce Android testing concepts
Unit and mock testing + Demos
Android testing overview + Demos
Q&A
Friday, August 28, 2009 2
3. Unit testing in Java
JUnit is the most popular framework
Most projects, frameworks, IDEs will ship with support
Out of the box, Eclipse IDE has good JUnit support
There are many frameworks
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#Java
Friday, August 28, 2009 3
4. Unit testing demo
Twitter Demo
Uses JUnit
Login/password
Update status
Friday, August 28, 2009 4
5. public void testStatusUpdate() {
try {
IMyTwitter twitter = new MyTwitter("supertesting", "s3!kretep@s5");
TwitterClient client = new TwitterClient(twitter);
String update = "Hello Phoenix Android";
client.post(update);
Assert.assertEquals(update, client.getLatestPost());
} catch (TwitterException te) {
Assert.fail("Shouldn't see this because the credentials are correct");
}
}
Friday, August 28, 2009 5
6. Mock Objects in Java
A Mock is “fake” object which mimics real objects for the
purpose of testing
Mimics real objects for testing
Such as a web service request
Mocking is a style of testing
http://martinfowler.com/articles/mocksArentStubs.html
Friday, August 28, 2009 6
7. Mock testing demo
Twitter Demo
Uses EasyMock
Avoid issuing live requests
Friday, August 28, 2009 7
9. Android Testing
Testing Android requires JUnit
Write tests to run and test parts of your application
InstrumentationTestRunner runs your test as an application
Executes code on emulator
Friday, August 28, 2009 9
10. Setting up your project
Using the command line tool will create a tests/ directory
inside the project.
android create project -t 3 -n hello_world -p hello_world -a HelloWorld -k com.openrain.hello_world
Use Eclipse manually.
Doesn’t create a tests/ directory
Manually create two projects.
Friday, August 28, 2009 10
11. Running Android tests
Two ways to run your tests
Command line runner
Eclipse runner
Friday, August 28, 2009 11
12. AndroidTestCase
unit testing
faster and easier to boot strap
only have access to a Context
useful for asserting layout, position, and components
Friday, August 28, 2009 12
13. ActivityInstrumentationTestCase
functional unit testing
access to a real live Activity instance
may simulate key events
slower
Friday, August 28, 2009 13
14. Instrumentation Demo
Functional tests
Test drives the Activity
Friday, August 28, 2009 14
15. Other Android tests
ServiceTestCase
For testing services
ActivityUnitTestCase and ActivityTestCase
For testing an Activity in isolation
ApplicationTestCase
Full integration testing
Friday, August 28, 2009 15
16. More Android testing
Testing APIs
http://developer.android.com/reference/android/test/package-summary.html
android.test
android.test.mock
Friday, August 28, 2009 16
17. Tips
Isolate and test non-Android code separately.
Functional tests use live objects. Slow, but reliable.
Javadoc is your friend
Friday, August 28, 2009 17