Slide 1

Slide 1 text

Behavior Driven Development in Android Teresa Holfeld + Selim Salman | Ubilabs

Slide 2

Slide 2 text

Who is talking? Teresa Holfeld Head of Mobile @ Ubilabs @TeresaHolfeld Selim Salman Android Engineer @ Ubilabs @A_SelimS

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Testing

Slide 5

Slide 5 text

Testing Src: http://giphy.com/

Slide 6

Slide 6 text

Test Driven Development

Slide 7

Slide 7 text

Test Driven Development

Slide 8

Slide 8 text

Behavior Driven Development

Slide 9

Slide 9 text

Behavior Driven Development

Slide 10

Slide 10 text

UI Testing in Android ● Espresso ● Espresso Test Recorder ● UIAutomator ● Monkey (Command Line) ● Monkeyrunner (Python) ● … >Not Plain Natural Language BDD!

Slide 11

Slide 11 text

Cucumber Cucumber: ● Software tool for writing automated acceptance tests in BDD ● Gherkin: Given - When - Then ● Ruby

Slide 12

Slide 12 text

Cucumber

Slide 13

Slide 13 text

Cucumber Keywords: ● Feature ● Scenario ● Given, When, Then, And, But (Steps) ● Background ● Scenario Outline ● Examples

Slide 14

Slide 14 text

Cucumber There are a few extra keywords as well: ● """ (Doc Strings) ● | (Data Tables) ● @ (Tags) ● # (Comments) https://cucumber.io/docs/reference

Slide 15

Slide 15 text

Calabash Calabash: ● Framework for automated acceptance tests for iOS and Android ● By Xamarin Calabash-android: ● Calabash testing framework for Android ● Uses Cucumber + Gherkin ● Ruby

Slide 16

Slide 16 text

Calabash

Slide 17

Slide 17 text

Calabash show_tracks.feature

Slide 18

Slide 18 text

Calabash

Slide 19

Slide 19 text

Calabash

Slide 20

Slide 20 text

Calabash show_tracks.feature

Slide 21

Slide 21 text

Calabash Calabash console

Slide 22

Slide 22 text

Calabash Calabash console

Slide 23

Slide 23 text

Calabash Calabash console

Slide 24

Slide 24 text

Calabash show_tracks.feature

Slide 25

Slide 25 text

Calabash calabash_steps.rb

Slide 26

Slide 26 text

Calabash-android demo!

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

To Test: I only want Java & plain English!

Slide 29

Slide 29 text

Cucumber + Espresso + Gradle // Espresso androidTestCompile('com.android.support.test:runner:0.5') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') // Cucumber androidTestCompile('info.cukes:cucumber-android:1.2.4') androidTestCompile('info.cukes:cucumber-picocontainer:1.2.4') androidTestCompile('info.cukes:cucumber-jvm-deps:1.0.3') // Screenshots androidTestCompile('com.squareup.spoon:spoon-client:1.2.0')

Slide 30

Slide 30 text

Cucumber + Espresso + Gradle

Slide 31

Slide 31 text

Cucumber + Espresso + Gradle

Slide 32

Slide 32 text

Cucumber + Espresso + Gradle

Slide 33

Slide 33 text

Cucumber + Espresso + Gradle ./gradlew connectedCheck :app:connectedCheck Retrieving Cucumber test report to /Users/aselims/AndroidStudioProjects/CucumberJava/app/build BUILD SUCCESSFUL

Slide 34

Slide 34 text

Cucumber + Espresso + Gradle

Slide 35

Slide 35 text

Cucumber + Espresso + Gradle

Slide 36

Slide 36 text

Other frameworks APPIUM, ROBOTIUM, Calabash ... JDave, Concordion, Easyb, JBehave, Cucumber ...

Slide 37

Slide 37 text

All good or what? + Serves as a technical documentation + Non-tech staff can understand + Enforces well-defined acceptance criteria + Easy to run, easy to learn - Comes with overhead: have to develop steps in Ruby - Not very mature: you have to implement certain things yourself (e.g. scrolling in RecyclerView) - You cannot go outside the app (e.g. Intents for image selection, email…)

Slide 38

Slide 38 text

Useful Links https://github.com/calabash/calabash-android https://www.agilealliance.org/glossary/bdd/ https://cucumber.io/docs/reference https://github.com/sebaslogen/CleanGUITestArchitecture

Slide 39

Slide 39 text

Danke! You may ask your questions now ;)