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

SPEK

 SPEK

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