Send the link below via email or IMCopy
Present to your audienceStart remote presentation
- Invited audience members will follow you as you navigate and present
- People invited to a presentation do not need a Prezi account
- This link expires 10 minutes after you close the presentation
- A maximum of 30 users can follow your presentation
- Learn more about this feature in our knowledge base article
Android Bootcamp Week 2
Transcript of Android Bootcamp Week 2
design by Dóri Sirály for Prezi
The Test Pyramid
Exercise 2: Add Espresso to the Test
Write the most unit tests
Write fewer integration tests
Write the least functional tests
Start with the functional test
Then a unit test
Then write the code to make the tests pass
Try Espresso, Robolectric, Fest and Mockito
BDD with Android
We will add a framework for behaviour driven development, including a unit test and a functional test
We will allow the user to view pages for the treasure list, the high scores, and the map.
Next time on
Layout and Design
What did we do well?
What could we do better?
What puzzles you?
Why Behaviour Driven?
The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.
Exercise 3: Some new behaviour
Exercise 4: Add Unit Tests
View layer - Instrument Tests
The Behaviour Driven
Some Existing Behaviour...
Given I have opened the App
When I enter my name
And click on OK
Then the main activity should open,
And show a welcome message that includes my name.
...And an Espresso Test To Match
Exercise 1: Create a failing functional test
1. Create src/androidTest/java (exact names are important)
2. Right click to create a new package com.thoughtworks.androidbootcamp.test (name MUST be same as base package name plus .test)
3. Right click to create a new Java class in this package. Extend this class from ActivityInstrumentationTestCase2<HelloAndroid>
4. Create a no-arg constructor that calls super with package name and HelloAndroid.class (suppress the deprecated warning)
5. Start the Genymotion emulator
6. Now should be able to run from Android Studio (right click on the test file) or from command line with gradle connectedCheck
7. To ensure the test is running correctly, make it fail by adding
1. Download Espresso bundled jar from
Save it in src/androidTest/libs
2. Change build.gradle dependencies:
androidTestCompile fileTree(dir: 'src/androidTest/libs', includes: ['*.jar'])
3. Resync Android Studio with
Tools > Android > Sync Project With Gradle Files
4. Now write the test method (JUnit 3 style only is supported)
Then static import the methods for better readability.
5. Complete the test shown earlier
6. Start up the emulator and check that it runs and passes.
1. Write a second functional test to express this new behaviour:
Given I have entered my name,
When I open the menu
Then it should have an option 'Treasure List'
And When I click on that option
Then I should see a heading on the page saying 'Find these Treasures:'
2. Make the test compile.
3. Run the test and watch it fail (hopefully for the right reason!)
4. Optional: Write similar tests for 'High Scores' and 'Map' menu options
Exercise 5: Make the Tests Pass!
1. Go to Novoda's Gradle Android Test Plugin from
2. Add a new module to your Android project to contain the unit tests
3. Create a JUnit test to test the
class (just test the player name for now - this test should pass)
4. Write a Robolectric test to test three new methods of the
5. Run the tests so you can see them fail.
gradle check --info
on the command line from the
directory. Results are reported at
6. Optional: Persuade Android Studio to run the tests. This is, unfortunately, not easy. Step by step instructions are at the Android Bootcamp Github.
1. Modify the
event of the
so that it calls either
, depending on which section number is passed in.
2. Implement the three methods to set the text of the section label to the heading for the page.
3. Run the tests. If all is well they should pass!
We created a new project and explored its structure
We began work on a game where the player can hunt for 'treasures', starting by allowing the player to enter their name and welcoming them.
JUnit in Android
Example JUnit Tests
What if Robolectric bites the dust?
Using FEST for Readability
Do Androids Dream of Electric Sheep?
Philip K Dick's 1968 sci-fi classic that inspired Blade Runner
Readability is important:
Matching the Given/When/Then Style
Add Hamcrest for
Robolectric test runner
Activity lifecycle via
Create mocks for collaborating classes.
Shadow classes are not perfect
Don't create test subclasses of your real classes
Stub methods with Mockito instead
FEST Android augments Hamcrest matchers with a fluent interface tailored for Android
Behavioural Tests with Espresso
Run on an android device
All are customisable
Lint: Another eye on quality
Gradle is set up to run Lint automatically
Lint reports some common issues
Sometimes your build will fail due to Lint errors
View the Lint report at AndroidBootcampProject/AndroidBootcamp/build/lint-results.html
Senior Developer Consultant
JUnit 3 vs JUnit 4
Model => POJOs
Running in IDE?
Yes, but see BDDinAS.md