Appearance
Integrationstests
Snapshot Tests (Skuzzle)
Diese Art von Tests schießen eine Anfrage an die API und erstellen von der Response einen Snapshot in späteren verlauf wird dann nurnoch geprüft ob die API wieder die gleiche Response zurückgibt
POM
xml
<dependencyManagment>
<dependency>
<groupId>de.skuzzle.test</groupId>
<artifactId>snapshot-tests-bom</artifactId>
<version>${snapshot-tests-bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagment>
<dependencies>
<dependency>
<groupId>de.skuzzle.test</groupId>
<artifactId>snapshot-tests-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.skuzzle.test</groupId>
<artifactId>snapshot-tests-directory-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.skuzzle.test</groupId>
<artifactId>snapshot-tests-json</artifactId>
<scope>test</scope>
</dependency>
</dependencies>Code
java
@SpringBootTest
@AutoConfigureMockMvc
@EnableSnapshotTests
@SnapshotDirectory("snapshot/response")
class IntegrationsTest {
@Autowired
private MockMvc mockMvc;
//@ForceUpdate // Nur verwenden wenn man die Testfälle ändert
@ParameterizedTest
@FilesFrom(testRessourcesDirectory = "snapshot/request", extension = "json")
void getUserById_shouldMatchSnapshot(Testfile testfile, Snapshot snapshot) throws Exception { // (2) Snapshot als Parameter
assertDoesNotThrow(()->{
String response = mockMvc.perform(get("/api/beispiel")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andReturn()
.getResponse()
.getContentAsString();
});
snapshot.named(testfile.name())
.assertThat(responseBody)
.as(json)
.matchesSnapshotStructure();
}
}Erklärung
AutoConfigureMockMvc
@AutoConfigureMockMvc
Konfiguriert automatisch eine MockMvc die dann injiziert werden kann mit folgenden sachen injiziert
- Security injection
- Controller injection
- Exception Handling injection
SnapshotDirectory
@SnapshotDirectory("snapshot/response")
Der Ordner in dennen die Snapshots gespeichert werden
Wichtig: der Pfad beginnt aus dem ressources Ordner
FilesFrom
@FilesFrom(testRessourcesDirectory = "snapshot/request", extension = "json")
Der Ordner in den die Testfälle als JSON enthalten sind
Wichtig: der Pfad beginnt aus dem ressources Ordner