Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Self-Contained integration tests with Docker an...
Search
Michael Vitz
September 07, 2018
Programming
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Self-Contained integration tests with Docker and Testcontainers
Michael Vitz
September 07, 2018
More Decks by Michael Vitz
See All by Michael Vitz
Spring Boot entzaubert
michaelvitz
0
110
JCON 2020: Java & Spring Boot im Container
michaelvitz
0
210
Java & Spring Boot im Container
michaelvitz
0
340
Geektastic Connect: Einführung in Web-Components
michaelvitz
0
110
JVM-Con 2019: Einführung in Web-Components
michaelvitz
0
130
JCON 2019: Einführung in Web-Components
michaelvitz
1
200
Neues von Java und dem JDK
michaelvitz
2
150
Spring Boot entzaubert
michaelvitz
0
330
Geektastic Connect: Neues von Java und dem JDK
michaelvitz
0
190
Other Decks in Programming
See All in Programming
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
420
APNsからLive Activityを開始する話
yumnumm
0
170
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.1k
すこし踏み込む CancellationToken
htkym
2
1.7k
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
残高管理から台帳サービスへの進化
artoy
1
200
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
540
ジョジョの世界をXRで再現する
mofurune
0
160
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
440
A Modern Web Designer's Workflow
chriscoyier
699
190k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
600
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to build a perfect <img>
jonoalderson
1
6.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Scaling GitHub
holman
464
140k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Transcript
2018-09-07 Berlin / BED-Con Self-Contained integration tests with Docker and
Testcontainers Michael Vitz https://pixabay.com/en/construction-site-crane-pier-1156575 @michaelvitz #bedcon
Michael Vitz Senior Consultant at INNOQ • Build, run, and
maintain JVM applications • JavaSPEKTRUM column owner • ❤ Clojure
www.innoq.com OFFICES Monheim Berlin Offenbach Munich Zurich FACTS ~125 employees
Privately owned Vendor-independent SERVICES Strategy & technology consulting Digital business models Software architecture & development Digital platforms & infrastructures Knowledge transfer, coaching & trainings CLIENTS Finance Telecommunications Logistics E-commerce Fortune 500 SMBs Startups
None
None
UI Integrated UI Service Service Integration Unit Implementation Unit
UI Integrated UI Service Service Integration Unit Implementation Unit https://martinfowler.com/bliki/TestPyramid.html
https://www.thoughtworks.com/de/insights/blog/introducing-software-testing-cupcake-anti-pattern https://labs.spotify.com/2018/01/11/testing-of-microservices Testing Pyramid Honeycomb Ice Cream Cone
None
https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
http://www.dossier-andreas.net/software_architecture/ports_and_adapters.html Ports-And-Adapters
None
Testcontainers • Launch Docker containers from Java • Test data
access layer • UI browser tests • Requires Docker • Requires Java 8 https://www.testcontainers.org
@ClassRule public static GenericContainer postgres = new GenericContainer("postgres:latest") .withEnv("POSTGRES_PASSWORD", "mysecretpassword");
private Connection create() throws Exception { String host = postgres.getContainerIpAddress(); int port = postgres.getMappedPort(5432); String url = "jdbc:postgresql://"+host+":"+port+"/postgres"; String user = "postgres"; String password = "mysecretpassword"; return DriverManager.getConnection(url, user, password); } Generic Containers
static String WAIT_PATTERN = ".*database system is ready to accept
connections.*\\s"; @ClassRule public static GenericContainer postgres = new GenericContainer("postgres:latest") .withEnv("POSTGRES_PASSWORD", "mysecretpassword") .waitingFor(forLogMessage(WAIT_PATTERN, 2)); Container != Application
@ClassRule public static PostgreSQLContainer postgres = new PostgreSQLContainer() .withPassword("mysecretpassword"); private
Connection create() throws Exception { String url = postgres.getJdbcUrl(); String user = postgres.getUsername(); String password = postgres.getPassword(); return DriverManager.getConnection(url, user, password); } Database Container
@Rule public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer() .withDesiredCapabilities(DesiredCapabilities.chrome()) .withRecordingMode(RECORD_ALL, new
File("build")); @Test public void test() { WebDriver driver = chrome.getWebDriver(); } Selenium Container
Testcontainers 2.0 • Cleanup API • Entangle from JUnit 4
rules https://github.com/rnorth/containercore/pull/1
www.innoq.com innoQ Deutschland GmbH Krischerstr. 100 40789 Monheim am Rhein
Germany +49 2173 3366-0 Ohlauer Str. 43 10999 Berlin Germany +49 2173 3366-0 Ludwigstr. 180E 63067 Offenbach Germany +49 2173 3366-0 Kreuzstr. 16 80331 München Germany +49 2173 3366-0 innoQ Schweiz GmbH Gewerbestr. 11 CH-6330 Cham Switzerland +41 41 743 0116 Thanks! Questions? Michael Vitz
[email protected]
michaelvitz +49 151 19116015 https://speakerdeck.com/michaelvitz/testcontainers https://github.com/mvitz/javaspektrum-testcontainers