This app is purely implemented using Kotlin.
This app is to test DNS servers and figure out the best / fastest DNS server (https://www.techradar.com/sg/news/best-dns-server)
InjectorUtilsas it can achieve my goals more easily.
Separate tests into unit tests and instrumentation tests.
Custom test runner created for Retrofit to inject testing end point instead of using real end point.
For manual tests
./gradlew clean ./gradlew assembleDebug
./gradlew testDebugUnitTest ./gradlew cAT --info
Install apk to device
Manual test fresh installation (with network connected) (Already covered in auto test)
Manual test fresh installation (with network disabled) (Already covered in auto test)
Manual test with existing installation (Already covered in auto test)
screenshots, you can find some screenshots for cases of
A list of successfully loaded DNS locations
Best location dialog
Instrumentation test result
Unit test result
Other UI behaviors can be oberserved from auto test run
Foundation - Components for core system capabilities, Kotlin extensions and support for multidex and automated testing.
Architecture - A collection of libraries that help you design robust, testable, and maintainable apps. Start with classes for managing your UI component lifecycle and handling data persistence.
UI - Details on why and how to use UI Components in your apps - together or separate
A MockWebServer bug was found during my implementation and testing. I asked one question java.lang.IllegalArgumentException: Log tag “okhttp3.mockwebserver.MockWebServer” exceeds limit of 23 characters in stackoverflow. The bug was confirmed by the author of MockWebServer.
I have provided my own fix to the bug which unblocked myself from completing the tests.