Fit Cat is an Android Wear watch face that shows the time with a different cat depending on how many steps you walked that day. How do you test something like that? Walk a lot while looking at your watch all the time?
I wrote Fit Cat with a modular structure that allows both unit testing and instrumentation testing.
All Android Wear apps have two modules, mobile
and wear
. I made them both depend on a ui
module, which has the implementation for rendering the bitmap for the watch face. This in turn depends on a lib
module, which is a pure Java library.
Unit testing
The lib
module contains the pure Java class ActionStore
, which has the logic to determine which image to show depending on the time, steps and randomizer value:
- The number of steps decides the action level, each mapping to multiple actions.
- Within that level, an action is picked randomly.
- Within that action, the time determines the image for the animation frame.
The watch face calls actionStore.getImage(time, steps, randomizerValue)
to get the image file name. In the junit tests, various values of time
, steps
and randomizerValue
are passed to that function, and the resulting image file names are verified.
Instrumentation testing
Besides verifying the logic, I also want to visually inspect the rendered bitmaps. The ui
module has a Renderer
class with a function drawWatchFace(canvas, steps, action, time, batteryPercent)
. I test this function by adding an InstrumentationTestCase
to the mobile
module, which enumerates all possible actions and write the animation frames to sdcard. I then combine them into animated gifs for visual inspection.
Since the wear
module also uses this Renderer
class from the ui
module, I am confident that the layout for all the different animation frames are good. Plus, I get to see all the cute actions Fit Cat does!
No comments:
Post a Comment
Inline coding questions will not be answsered. Instead, ask on StackOverflow and put the link in the comment.