Slide 1

Slide 1 text

Comment nous utilisons Kotlin et Gradle Build Tool * pour faire évoluer la communauté WireMock Oleg Nenashev, @oleg_nenashev * Gradle® and the Gradlephant logo are registered trademarks of Gradle, Inc. "Gradle" means "Gradle Build Tool" and does not reference Gradle, Inc. and/or its subsidiaries.

Slide 2

Slide 2 text

Source: Holy Grail des Monty Python Attention Oleg va parler français!

Slide 3

Slide 3 text

NOTE ● Cette présentation diffère de celle présentée lors de Devoxx FR 24 ● Elle a été modifiée le 8 octobre 2025 afin d'exclure la propriété intellectuelle de Gradle Inc ● La plupart des informations sont toujours disponibles ● Gradle® et le logo Gradlephant sont des marques déposées de Gradle, Inc. «Gradle» signifie «Gradle Build Tool» et ne fait pas référence à Gradle, Inc. et/ou à ses filiales 3

Slide 4

Slide 4 text

4 https://instagram.com/asciidwarf

Slide 5

Slide 5 text

> whoami @oleg_nenashev oleg-nenashev Dr. Nenashev / Mr. Jenkins Architecte de communauté Bricoleur d'automatisation #RussiansAgainstPutin #StandWithUkraine 1.x

Slide 6

Slide 6 text

Les Trois “Moque-taires” - Tous comme un, un comme tous (sic!)

Slide 7

Slide 7 text

wiremock.org wiremock.org

Slide 8

Slide 8 text

wiremock.org IF func(requête) THEN func(réponse) * * La réalité est BIEN plus compliquée WireMock JSON: Client library réponse requête Client App Serveur de l’API HTTP/2

Slide 9

Slide 9 text

WireMock en Java wiremock.org/docs/stubbing

Slide 10

Slide 10 text

Capacités de WireMock wiremock.org/docs

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

12

Slide 13

Slide 13 text

Écosystème de WireMock wiremock.org/docs

Slide 14

Slide 14 text

Écosystème de WireMock & JVM ● Java ● Kotlin ● Scala ● Groovy ● Clojure ● (?)Android ● JUnit 4/5 ● Testcontainers ● Sprint Boot ● Spring Cloud Contract ● Quarkus ● Maven/Gradle Build Tool ● Spock ● Pact

Slide 15

Slide 15 text

wiremock.org/docs/solutions/kotlin

Slide 16

Slide 16 text

DSL Bindings pour Kotlin 16 wiremock/kotlin-wiremock par Marcin Ziolo wiremock.get { url equalTo "/users/1" } returns { statusCode = 200 header = "Content-Type" to "application/json" body = """ { "id": 1, "name": "Bob" } """ }

Slide 17

Slide 17 text

Adaptateur pour Kotest 17 kotest/kotest-extensions-wiremock class SomeTest : FunSpec({ val customerServiceServer = WireMockServer(9000) listener(WireMockListener(customerServiceServer, ListenerMode.PER_SPEC)) test("let me get customer information") { customerServiceServer.stubFor( WireMock.get(WireMock.urlEqualTo("/customers/123")) .willReturn(WireMock.ok()) ) val connection = URL("http://localhost:9000/customers/123") .openConnection() as HttpURLConnection connection.responseCode shouldBe 200 } // ... }) https://kotest.io

Slide 18

Slide 18 text

Plugins de WireMock 18 wiremock/ecosystem

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

Les Trois “Moque-taires” - Tous comme un, un comme tous

Slide 21

Slide 21 text

21 Notre d'Artagnan Gradle Build Tool peut vous aider

Slide 22

Slide 22 text

Nous utilisons Gradle Build Tool dans WireMock ● build.gradle dans WireMock Java ○ wiremock/wiremock/blob/master/build.gradle ● la majorité des plugins ● la majorité des intégrations JVM ● outils de développement 22

Slide 23

Slide 23 text

Et Kotlin! 23 ● 2023 - Kotlin est le langage par défaut pour les définitions Gradle Build Tool ● Scripts, Plugins, Convention Plugins

Slide 24

Slide 24 text

24 docs.gradle.org/current/samples/ sample_convention_plugins.html Encapsulation et partage pour les projets Gradle Build Tool

Slide 25

Slide 25 text

Convention Plugins en Gradle Build Tool Vous pouvez partager la logique ● Dans votre project multi-repo 25 docs.gradle.org/current/samples/ sample_publishing_convention_plugins.html

Slide 26

Slide 26 text

Convention Plugins en Gradle Build Tool Vous pouvez partager la logique ● Dans votre projet multi-repo ● … ou entre l’autres repositories 26 plugins.gradle.org

Slide 27

Slide 27 text

Convention Plugins en Gradle Build Tool Vous pouvez partager la logique ● Dans votre projet multi-repo ou entre les repositories ● En DSL Kotlin/Groovy 27 D S L

Slide 28

Slide 28 text

Convention Plugins en Gradle Build Tool Partagez la logique ● Dans votre projet multi-repo ou entre les repositories ● En DSL Kotlin/Groovy ● Le libraire Kotlin plein github.com/zapzombies/gradle-convention-plugins

Slide 29

Slide 29 text

WireMock Convention Plugin wiremock/gradle-wiremock-extension-plugins ● Processus de build & test unifié ● Gestion des dépendances unifié ● Shading pour la bibliothèque WireMock et WireMock Standalone ● Generation des POMs Maven ● Automatisation des releases vers Maven Central 29

Slide 30

Slide 30 text

Definition minimal 30 build.gradle.kts:

Slide 31

Slide 31 text

Configuration du plugin 31 wiremock/gradle-wiremock-extension-plugins gradle.properties

Slide 32

Slide 32 text

Customisation du plugin 32 wiremock/gradle-wiremock-extension-plugins build.gradle.kts:

Slide 33

Slide 33 text

Pipeline unifié dans GitHub Actions 33 wiremock/gradle-wiremock-extension-plugins

Slide 34

Slide 34 text

Examples ● github.com/wiremock/gradle-wiremock-extension-plugins ● WireMock Faker Extension ● WireMock State Extension 34

Slide 35

Slide 35 text

35

Slide 36

Slide 36 text

Les conclusions ● Kotlin est bon pour encapsuler la complexité de votre automatisation ● Gradle Build Tool peut être simple pour les utilisateurs finaux ● Considérez les plugins de convention et les catalogues de versions 36

Slide 37

Slide 37 text

GitHub: oleg-nenashev Twitter: @oleg_nenashev Questions? WireMock Community Slack