×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Why testing a framework for Android is different David Schreiber-Ranner / PSPDFKit © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 1
Slide 2
Slide 2 text
PSPDFKit • A commercial library for Android, iOS, Chrome OS, Web • Enables developers to build apps with PDFs • Several wrappers • SYNCKit © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 2
Slide 3
Slide 3 text
Try our beta app: pspdfk.it/ viewer © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 3
Slide 4
Slide 4 text
Numbers, numbers, numbers • 7 developers (on the Android stack) • Version 1.0, February 2015 • 39 releases • Currently v2.5.1 © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 4
Slide 5
Slide 5 text
A couple of tests • Android • 144 local unit tests • 814 instrumentation tests • C++ • 753 unit tests © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 5
Slide 6
Slide 6 text
How to test an app? © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 6
Slide 7
Slide 7 text
Example: App on Google Play © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 7
Slide 8
Slide 8 text
Testing setup • Local unit tests • JUnit • Robolectric • Instrumentation tests • Manual testing © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 8
Slide 9
Slide 9 text
Feedback loop • People using your app • Crash reports • Analytics • Feedback © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 9
Slide 10
Slide 10 text
How to test a library? © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 10
Slide 11
Slide 11 text
Example: Library via Maven repository © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 11
Slide 12
Slide 12 text
Testing setup • Local unit tests • JUnit • Robolectric • Instrumentation tests • Manual testing © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 12
Slide 13
Slide 13 text
Feedback loop • No immediate end-users • No runnable app • No analytics • Feedback © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 13
Slide 14
Slide 14 text
Second-hand feedback © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 14
Slide 15
Slide 15 text
Recipe for library testing Cooking with 4 ingredients © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 15
Slide 16
Slide 16 text
Ingredient 1 Write an app © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 16
Slide 17
Slide 17 text
Write an app! • Write an app that uses your library • Add a sample/ app to your project • Use it for development • Use it as documentation © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 17
Slide 18
Slide 18 text
Ingredient 2 Create a test app! © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 18
Slide 19
Slide 19 text
Usual structure my-project/ ├── library/ | ├── main/ | ├── test/ | └── androidTest/ ... © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 19
Slide 20
Slide 20 text
Resulting apk library-debug-tests.apk ├── classes.dex ├── assets/ ├── res/ ├── lib/ ... © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 20
Slide 21
Slide 21 text
Problems with that approach © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 21
Slide 22
Slide 22 text
! 65536 © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 22
Slide 23
Slide 23 text
! ... hmm, interesting. final Context context = InstrumentationRegistry.getContext(); final Context targetContext = InstrumentationRegistry.getTargetContext(); © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 23
Slide 24
Slide 24 text
Improved structure my-project/ ├── library/ | ├── main/ | └── test/ ├── library-tests/ | ├── main/ | └── androidTest/ ... © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 24
Slide 25
Slide 25 text
Resulting apk library-debug.apk ├── classes.dex ├── assets/ ├── res/ ├── lib/ ... library-debug-tests.apk ├── classes.dex ├── assets/ ├── res/ ├── lib/ ... © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 25
Slide 26
Slide 26 text
Ingredient 3 Test your end product © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 26
Slide 27
Slide 27 text
BuildConfig.java public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("false"); public static final String BUILD_TYPE = "release"; // Your custom build config fields. public static final boolean IS_DEMO = false; public static final boolean IS_RELEASE_BUILD = true; ... } © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 27
Slide 28
Slide 28 text
app/build.gradle android { buildType.release { minifiedEnabled true ... } } © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 28
Slide 29
Slide 29 text
Ingredient 4 Dogfood your library © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 29
Slide 30
Slide 30 text
Dogfooding is short for “Eating your own dog food” which represents the practice of using your own products. © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 30
Slide 31
Slide 31 text
How to dogfood • Write apps using your library • Serve your apps to end users • Tests your app in different scenarios © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 31
Slide 32
Slide 32 text
Summary • Create apps • Split off your tests • Test your end product • Eat all your dog food! © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 32
Slide 33
Slide 33 text
So long, and thanks for all the dog food! © David Schreiber-Ranner 2016 / @flashmasterdash / pspdfkit.com 33