android testing an overview of - oestrichandroid studio uses gradle, not much support for this yet

37
An Overview of Android Testing Eric Oestrich BohConf 7/19/2013

Upload: others

Post on 08-Jul-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

An Overview of Android Testing

Eric Oestrich

BohConf7/19/2013

Page 3: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

You can test Android?

Page 4: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Regular Android testing leaves a lot to be

desired

Page 5: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Robolectrichttp://robolectric.org/

Page 6: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Run tests on your development machine

Page 7: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

JUnit 4

Page 8: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Requires Maven

Page 9: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

IntelliJSupports maven projects

Page 10: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

EclipseShould just use IntelliJ

Page 11: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Android StudioUses gradle, not much support for

this yet

Page 12: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Downsides

Page 13: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Content Providers are still hard to test

Page 14: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Still somewhat newNot every area is able to be tested

nicely

Page 15: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Lack of Documentation

Page 16: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Extra Libraries You Should Consider

Page 17: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Hamcresthttp://hamcrest.org/JavaHamcrest/

Page 18: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Hamcrest● Nicer assertions than regular JUnit

Page 19: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

HamcrestassertThat(item.getId(), equalTo(itemId));

Page 20: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

FEST Androidhttps://github.com/square/fest-android

Page 21: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

FEST Android● Fluent assertions make test read nicely● FEST additions specific to Android

Page 22: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

FEST Android

assertThat(view.getVisibility(), equalTo(View.GONE));

vs

assertThat(view).isGone();

Page 23: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Awaitilityhttps://code.google.com/p/awaitility/

Page 24: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Awaitility● Handles testing asynchronous code nicely● Set timeouts

Page 25: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Awaitilitypublic void testActivityTitle() {

await().atMost(TIMEOUT_SECONDS, TimeUnit.SECONDS).until(

activityTitle(), equalTo("Notification"));

Spoon.screenshot(getActivity(), "activity_title");

}

Page 26: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Awaitilityprotected Callable<String> activityTitle() {

return new Callable<String>() {

@Override

public String call() throws Exception {

return mActivity.getTitle().toString();

}

};

}

Page 27: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Spoonhttps://github.com/square/spoon

Page 28: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Spoon● Take screenshots of app during test● Compiles to animated gif● Instrumentation tests

Page 29: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Spoonpublic void testActivity() {

Spoon.screenshot(getActivity(), "activity");

}

Page 30: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Spoon

http://square.github.io/spoon/sample/index.html

Page 31: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Continuous Integration

Page 32: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Jenkins Shell Scriptexport ANDROID_HOME=/var/lib/jenkins/tools/android-sdkmvn clean test --batch-mode

Page 33: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

Javadocs

Page 34: Android Testing An Overview of - OestrichAndroid Studio Uses gradle, not much support for this yet

JUnit Results