@EnabledOn... um Tests nur unter bestimmten Umständen laufen zu lassen @EnabledOnOs(), @EnabledOnJre(), @DisabledOn...(), @EnabledOnSystemProperty(), @EnabledIfEnvironmentVariable()
@ParametrizedTest mit @MethodSource, @ValueSource, @EnumSource, @ArgumentSource oder @CsvSource
- EqualsVerifier testen equals() und hashCode() entsprechend der Vorgaben für beides
- ToStringVerifier testet toString()
Mit "Spock" kann man groovy Spezialitäten nutzen, um Testdaten einfacher zu beschreiben
- generatedata.com
- JavaFaker / ObjectMother Pattern / TestDataBuilder Pattern personBuilder.WithFirstName().
- AssertEquals vs. AssertJ (fluent assertion library)
- asumptions für Vorbedingungen (assumeThat())
- Grouped Assertions in JUnit 5
- Migration auf JUnit 5 ist einfach durch Verwendung von vintage-Dependency. Damit laufen auch JUnit 4 Tests noch
Integrated tests vs. integration tests Spotify hat genauere Definition "wann haben wir integrated Tests" => Das will man minimieren
MockServer, WireMock Aber: "Don't mock API you don't own" Wenn sich die API ändert, dann merkt man es nicht Lösung: Verified Fakes
REST-assured
Häufige Lösungsansätze sind embedded DB, standalone DB, shared DB
Lösung: Docker und "Testcontainers"
@Container
PostgreSQLContainer con = new PostgreSQLContainer();
Bieten neben DB Containern auch Webdriver Containers mit automatischer Videoaufnahme Viele weitere Container
Kann auch Container starten und stoppen mit Mavens pre-integration-test und post-integration-test Phasen
github.com/sparsick/test-tool-talk