Join Chiu-Ki Chan for an in-depth discussion in this video Test doubles, part of Effective Android Testing for Mobile Developers.
- [Instructor] What happens if we run this test again? Let's try that. Click on the green triangle to run click to favorite again. This time it failed. Let's take a look at the error message. It said, expected, not is selected, and then has this long list of attributes. If you scroll you can see that the view is selected is actually true. Scroll down in the errors and see where the failure actually happens.
It's in line 45. We are verifying that we started with the recipe as not selected. And the reason why it failed is because, when we ran this test previously we clicked on the recipe and stored the variables selected into our shared preferences. This is why when we run the test a second time it will not pass. When the test changes the state of the app, we cannot run it again and expect the same result.
How to solve this problem? We want it so that in the app it will always remember our selection, but in our test, we want it to start as a known state. To solve this problem we can use dependency injection with test doubles. A test double is like a stunt double. It stands in place of the actual object during test. In our case, instead of storing favorites in shared preferences, we will store them in an in-memory hash mark.
That way, the hash mark is always empty when we start the test, regardless of what we did to it previously. However, we still want to use shared preferences during normal app operation so that it remembers the favorites when we come back to the app later. How do we only swap out shared preferences' favorites with in-memory favorites during test? We are going to use dependency injection. We'll take a look at that next.
Author
Released
8/30/2017- Why test?
- Local vs. on-device
- Code coverage
- UI testing
- RecyclerView
- Hermetic environment
- Dependency injection
- Testing with MVP
Skill Level Intermediate
Duration
Views
Related Courses
-
Android App Development: Unit Testing
with James P White2h 58m Intermediate -
Android Studio Essential Training
with David Gassner3h 41m Beginner -
Android App Development: Data Persistence Libraries
with Annyce Davis3h 59m Intermediate
-
Introduction
-
Welcome1m
-
-
1. Testing Considerations
-
Why test?1m 10s
-
Types of tests1m 10s
-
Local vs. on-device4m 54s
-
-
2. Test as You Go
-
The sample app1m 32s
-
Smallest unit first2m 20s
-
Code coverage5m 20s
-
-
3. UI Testing
-
RecyclerView7m
-
RecipeActivity: Layout2m 38s
-
Vector drawable: Create3m 7s
-
Vector drawable: Use2m 8s
-
SharedPreferencesFavorites5m 22s
-
Favorite: OnClickListener1m 40s
-
-
4. Hermetic Environment
-
Test doubles2m 10s
-
Dependency injection1m 3s
-
InMemoryFavorites4m 30s
-
RecipeApplication3m 18s
-
TestRecipeApplication1m 51s
-
CustomTestRunner2m 26s
-
Test state: Setup2m 17s
-
Test state: Test3m 47s
-
-
5. Robot Pattern
-
What vs. How56s
-
ScreenRobot3m 4s
-
RecipeRobot6m 12s
-
Clear favorites6m 55s
-
Separation of concerns1m 40s
-
-
6. Model-View-Presenter
-
Introduction1m 19s
-
Refactor: Load recipe2m 58s
-
Refactor: Show error6m 1s
-
Refactor: Show recipe7m 6s
-
Refactor: Toggle favorite3m 31s
-
Mockito: Intro1m 18s
-
Mockito: Setup4m 29s
-
Testing with MVP: Exception2m 26s
-
Summary1m 14s
-
-
Conclusion
-
Next steps23s
-
- Mark as unwatched
- Mark all as unwatched
Are you sure you want to mark all the videos in this course as unwatched?
This will not affect your course history, your reports, or your certificates of completion for this course.
CancelTake notes with your new membership!
Type in the entry box, then click Enter to save your note.
1:30Press on any video thumbnail to jump immediately to the timecode shown.
Notes are saved with you account but can also be exported as plain text, MS Word, PDF, Google Doc, or Evernote.
Share this video
Embed this video
Video: Test doubles