TODO
...
Beroenden (Wiremock, Bean Matchers m.m.)
...
AbstractAppTest
...
ResourceLoader extension
...
Denna starter tillhandahåller stödfunktionalitet och beroenden för att skriva tester i tjänster, bl.a.:
App-tester
För app-tester tillhandahåller startern ett enkelt sätt att starta upp en WireMock-instans på en slumpmässig, ledig port:
Code Block | ||
---|---|---|
| ||
@WireMockAppTestSuite( [1]
files = "classpath:/MyFirstAppTest/", [2]
classes = Application.class [3]
)
class MyFirstAppTest extends AbstractAppTest { [4]
@Test
void test1_successful() throws Exception {
setupCall()
.withServicePath("/path/to/endpoint") [5]
.withHttpMethod(HttpMethod.POST) [6]
.withRequest("some-request.json") [7]
.withExpectedResponseStatus(HttpStatus.OK) [8]
.withExpectedResponse("expected-response.json") [9]
.sendRequestAndVerifyResponse();
}
} |
[1]
Annotering som anger att WireMock ska startas upp för aktuell testklass.[2]
Pekar ut var WireMock hittar resurser (mappningar etc.).För varje test-metod kommer metodnamnet att byggas på denna sökväg, t.ex. .../MyFirstAppTest/test1_successful/...
.
[3]
Pekar ut vilken klass som ska användas för att ladda context:en för testet. Kommer oftast att vara tjänstens applikationsklass, d.v.s. den klass som innehåller en main
-metod och som används för att starta tjänsten.[4]
Test-basklassen AbstractAppTest
innehåller funktionalitet för att bl.a. enkelt kunna sätta upp ett testfall, mot en förväntad endpoint ([5]
) med en viss HTTP-metod ([6]
), ett request ([7]
), en förväntad HTTP-status ([8]
) och ett förväntat svar ([9]
).
Rekommenderat är att placera app-tester under src/integration-test/java
och deras resurser under src/integration-test/resources
.
ResourceLoaderExtension
Ramverket tillhandahåller en JUnit-extension för att enkelt kunna läsa in resurser i sina tester:
Code Block | ||
---|---|---|
| ||
@ExtendWith(ResourceLoaderExtension.class) [1]
class MyTest {
@Test
void test1(@Load("/somefile.txt") String s) { [2]
...
}
@Test
void test2(@Load("/person.json") @DeserializeJson Person p) { [3]
...
}
@Test
void test3(@Load("/settings.xml") @DeserializeXml Settings s) { [4]
...
}
} |
[1]
Aktiverar stöd för övriga annoteringar ([2]
, [3]
och [4]
) för att läsa in resurser.[2]
@Load
-annoteringen används för att peka ut vilken resurs på classpath:en som ska läsas in i den annoterade parametern.[3]
@DeserializeJson
-annoteringen används i kombination med @Load
för att läsa in en resurs och försöka deserialisera den från JSON till den annoterade parametern.[4]
@DeserializeXml
-annoteringen används i kombination med @Load
för att läsa in en resurs och försöka deserialisera den från XML till den annoterade parametern.