...
[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
.
Porten som WireMock-servern startas på exponeras som wiremock.server.port
, och man bör då peka om eventuella URL:er för t.ex. integrationer att gå mot den lokala datorn och den porten. t.ex. integration.messaging.base-url=http://localhost:${wiremock.server.port}/...
JsonUnit används av ramverket för att hantera både request-matchning och response-verifiering.
Här kommer exempel på hur man kan använda detta:
mapping.json (wiremock request matchning)
Code Block |
---|
{
"request": {
...
"bodyPatterns" : [ {
"equalToJson" : "{ \"someAttribute\": \"${json-unit.any-string}\" }",
"ignoreArrayOrder" : true,
"ignoreExtraElements" : true
} ]
...
},
...
} |
response.json (response-verifiering)
Code Block |
---|
{
"id": "${json-unit.any-number}", // matches: "234"
"subject": "${json-unit.regex}[A-Z]+", // matches: "A SUBJECT"
"createdBy": "createdBy1",
"modifiedBy": "Jack the updater",
"created": "2022-01-01T12:14:32.234+01:00",
"modified": "${json-unit.any-string}" // matches: "anything"
} |
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(value = "/person.json", as = Load.ResourceType.JSON) @DeserializeJson Person p) { [3] ... } @Test void test3(@Load(value = "/settings.xml") @DeserializeXml, as = Load.ResourceType.XML) 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. Anges inget värde i “as”-attributet, deserialiseras resursen som en String till den annoterade parametern.[3]
@DeserializeJson
-annoteringen ResourceType.JSON
i “as”-attributet 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 ResourceType.XML
i “as”-attributet 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.
...