+ All Categories
Home > Documents > Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker...

Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker...

Date post: 26-May-2020
Category:
Upload: others
View: 7 times
Download: 0 times
Share this document with a friend
55
Philipp Krenn @xeraa Real Integrat-ion Tests with
Transcript
Page 1: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Philipp Krenn@xeraa

Real Integrat-̴̴̴ion Tests with

Page 2: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Developer !

Page 3: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Tests

Page 4: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 5: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 6: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

But the unit tests passed, so...

https://twitter.com/Aaronius/status/933497253347463168

Page 7: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 8: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 9: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 10: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 11: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Ok — we need

Interation Tests

Page 12: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Mocks

Page 13: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Mockito, EasyMock, JMock,...

Page 14: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 15: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Ich mock mir die Welt widdewidde wie sie mir

gefällt

Page 16: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

! Unit tests, systems not

under your control! Test real datastore

Page 17: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

In-Memory

Page 18: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

H2, HSQLDB, Apache Derby,...

Page 19: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 20: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Embedded Elasticsearch unsupported in 5.0+

https://www.elastic.co/blog/elasticsearch-the-server

Page 21: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

! Often good enough! Test real datastore,

supported systems

Page 22: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Actual Datastore

Page 23: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Local installationDocker container

Cloud

Page 24: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Demo

Page 25: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

! "Good old approach"! External dependency,

parallelization

Page 26: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

In-Process

Page 27: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

embedded-elasticsearchhttps://github.com/allegro/embedded-elasticsearch

Page 28: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Demo

Page 29: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Customization & Mappings.withPlugin("analysis-stempel").withIndex("cars", IndexSettings.builder() .withType("car", getSystemResourceAsStream("car-mapping.json"))

Page 30: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

! IDE support,

customization, custom lifecycle!

Custom integration

Page 31: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

More embedded datastores

https://github.com/flapdoodle-oss/de.flapdoodle.embed.process

Page 32: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Build Tool

Page 33: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

docker-maven-pluginhttp://dmp.fabric8.io

Page 34: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Build a custom image: docker:build

Run container: docker:start & docker:stop

Page 35: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Dockerfile or Docker assembly<build> <from>java:8</from> <assembly> <descriptor>docker-assembly.xml</descriptor> </assembly> <cmd> <shell>java -jar /maven/service.jar</shell> </cmd></build>

Page 36: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Demo

Page 37: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

maven-failsafe-pluginhttps://maven.apache.org/surefire/maven-failsafe-plugin/

Page 38: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

! Standard or custom

Docker image! One instance for all

tests, no IDE support

Page 39: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Testcontainers

Page 40: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Testcontainers is a Java library that supports JUnit tests, providing

lightweight, throwaway instances of common databases [...] that can run in a

Docker container.

Page 41: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Dependency@ClassRulepublic static GenericContainer redis = new GenericContainer("redis:3.0.2") .withExposedPorts(6379);

Page 42: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 43: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

testcontainers-java-module-elasticsearch

https://github.com/dadoonet/testcontainers-java-module-elasticsearch

Page 44: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Work in Progresshttps://github.com/testcontainers/testcontainers-java/pull/

826

Page 45: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Demo

Page 46: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Todo

Set (randomized) port

Page 47: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

! IDE support,

customization, custom lifecycle!

Custom integration

Page 48: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml
Page 49: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Containerized CI?Sidecar

Or embedded approach

Page 50: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Conclusion

Page 51: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

WhyIntegration Tests

Page 52: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Why notMockingIn-Memory

Actual Datastore

Page 53: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

HowIn-ProcessBuild Tool

Testcontainers

Page 54: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Codehttps://github.com/xeraa/integration-test-demo

Page 55: Philipp Krenn @xeraadocker:build Run container: docker:start & docker:stop. Dockerfile or Docker assembly  java:8  docker-assembly.xml

Questions?Philipp Krenn̴̴̴̴@xeraa


Recommended