Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SPEK

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 SPEK

Avatar for Martin Petrulak

Martin Petrulak

September 24, 2019
Tweet

More Decks by Martin Petrulak

Other Decks in Technology

Transcript

  1. Martin Petrulak .droidconGreece 2019 Agenda • Drawbacks? of JUnit •

    Introduction of Spek • Project set-up • Core principles • How to write a test ( 2 distinct styles) • Specification • Gherkin • Wrap up & Questions
  2. Martin Petrulak .droidconGreece 2019 Spek • Unit testing framework •

    It’s DSL allows you to write nested tests • Uses jUnit 5 engine • JVM / Android / Multiplatform • JaCoCo, Assertions/Mocking - use whatever you like • 1st commit 16/12/2012 - Hadi Hariri (talking Kotlin) • 2 styles how to write tests : Specification & Gherkin
  3. Martin Petrulak .droidconGreece 2019 How to create the test •

    Extend : Spek{…} abstract class • Nesting lambdas • test{…} - assertions • group{…} - create hierarchy
  4. Martin Petrulak .droidconGreece 2019 Execution order • Discovery • Top

    down build test three • Execute code in groups • Top down execution of • Tests • Registered fixtures for scopes
  5. Martin Petrulak .droidconGreece 2019 Fixtures • before/afterGroup{…}. - only current

    scope • before/afterEachTest{…} - all current & nested scopes
  6. Martin Petrulak .droidconGreece 2019 Memoized delegate • Caching mode •

    TEST - new instance per test • EACH_GROUP - new instance per group • SCOPE - same instance among the scope(group) • INHERIT - ???
  7. Martin Petrulak .droidconGreece 2019 Specification style • group{…} -> describe{…}

    or context{…} • test{…} -> it{…} • before/afterEachTest{…} -> before/afterEach{…} • before/afterGroup{…} -> before/after{…}
  8. Martin Petrulak .droidconGreece 2019 Gherkin • Written text - executable

    specification • Most of the lines start with a special keyword • Feature, Scenario, Given, When , Then, And • Keywords are translated to multiple languages
  9. Martin Petrulak .droidconGreece 2019 Gherkin - example Feature: Guess the

    word # The first example has two steps Scenario: Maker starts a game When the Maker starts a game Then the Maker waits for a Breaker to join # The second example has three steps Scenario: Breaker joins a game Given the Maker has started a game with the word "silky" When the Breaker joins the Maker's game Then the Breaker must guess a word with 5 characters
  10. Martin Petrulak .droidconGreece 2019 Gherkin • group{…} -> Feature{…} ,

    Scenario{…} • test{…} -> Given{…}, When{…} And{…}, Then{…}
  11. Martin Petrulak .droidconGreece 2019 Gherkin disadvantages • Not so flexible

    regarding nesting • Default caching mode EACH_SCOPE -> test are not isolated ->if one test fails, its over • No build in mechanism for skipping • Given/When acts as a test in output and counts as a test
  12. Martin Petrulak .droidconGreece 2019 Summary • Nested test are easy

    to read -> understand -> review • Reusability made easy (memoized) • Write parametrised tests as normal Kotlin code • Not so many options as jUnit 5 to fine tune • Specification vs Gherkin • Can exist alongside existing jUnit tests -> give it a shot
  13. Martin Petrulak .droidconGreece 2019 Advices / Best practices • println(…)

    is your friend • never interact with property outside of before/after..{…} • one assertion per test( it{…},Then{…}, And{…} ) • use test only for assertions
  14. Martin Petrulak .droidconGreece 2019 Resources • https://spekframework.org/ • https://github.com/spekframework/spek/ •

    https://cucumber.io/docs/gherkin/ • https://github.com/Petrulak/android-mvvm-spek • //TODO slides link @martin_petrulak