Skip to content

Latest commit

 

History

History
102 lines (78 loc) · 3.69 KB

README.md

File metadata and controls

102 lines (78 loc) · 3.69 KB

Wiremock4k

compile 'com.github.christophpickl.kpotpourri:wiremock4k:$versionKPotpourri'

This is a small test library basically simplifying the Wiremock API.

It automates starting/stopping/reseting the wiremock server by providing a TestNG listener WiremockTestngListener and a base class WiremockTest. Additionally the setup of responses and verification of requests are somehow made simpler.

Via TestNG listener

This is the preferred approach, as it does not limit you in having only a single base class or a single test runner like in JUnit.

import com.github.christophpickl.kpotpourri.wiremock4k.DEFAULT_WIREMOCK4K_PORT
import com.github.christophpickl.kpotpourri.wiremock4k.WIREMOCK4K_HOSTNAME
import com.github.christophpickl.kpotpourri.wiremock4k.WiremockMethod
import com.github.christophpickl.kpotpourri.wiremock4k.request.verifyGetRequest
import com.github.christophpickl.kpotpourri.wiremock4k.response.givenWiremock
import com.github.christophpickl.kpotpourri.wiremock4k.testng.WiremockTestngListener
import org.testng.annotations.Listeners
import org.testng.annotations.Test

@Test
@Listeners(WiremockTestngListener::class)
class MyWiremockTest {

    fun `verify request`() {
        givenWiremock(WiremockMethod.GET, "/rest")
        
        println("execute request: http://$WIREMOCK4K_HOSTNAME:$DEFAULT_WIREMOCK4K_PORT/rest")
        
        verifyGetRequest("/rest")
    }
    
}

Via TestNG base class

Having a single inheritance language, this could lead to some problems if you are already in need of a certain base class. On the other hand, using the base class offers you additional features like easily setting the port or direct access to the wiremock server instance.

import com.github.christophpickl.kpotpourri.wiremock4k.WiremockMethod
import com.github.christophpickl.kpotpourri.wiremock4k.request.verifyDeleteRequest
import com.github.christophpickl.kpotpourri.wiremock4k.request.verifyGetRequest
import com.github.christophpickl.kpotpourri.wiremock4k.request.verifyPostRequest
import com.github.christophpickl.kpotpourri.wiremock4k.request.verifyPutRequest
import com.github.christophpickl.kpotpourri.wiremock4k.request.verifyRequest
import com.github.christophpickl.kpotpourri.wiremock4k.request.withCookie
import com.github.christophpickl.kpotpourri.wiremock4k.request.withHeader
import com.github.christophpickl.kpotpourri.wiremock4k.response.givenWiremock
import com.github.christophpickl.kpotpourri.wiremock4k.response.withHeaders
import com.github.christophpickl.kpotpourri.wiremock4k.testng.WiremockTest
import org.testng.annotations.Test

@Test class UsageTest : WiremockTest() {

    private val path = "/rest"

    fun `prepare response`() {
        givenWiremock(
                method = WiremockMethod.GET,
                path = path,
                statusCode = 200,
                responseBody = "hello wiremock4k"
        ) {
            // acting on `ResponseDefinitionBuilder`
            withHeaders("Accept" to "application/json")
        }
    }

    fun `verify request`() {
        println(wiremockBaseUrl) // http://localhost:9987

        verifyGetRequest(path)
        verifyPostRequest(path)
        verifyPutRequest(path)
        verifyDeleteRequest(path)

        verifyGetRequest(path) {
            // acting on `RequestPatternBuilder`
            withHeader("Accept", "application/json")
            withCookie("JESSIONID", "1234")
        }

        // or select HTTP method dynamically by passing an enum instance
        verifyRequest(WiremockMethod.PATCH, path)
    }

    fun `access the native mock server instance`() {
        println(server.isRunning)

        server.findNearMissesForUnmatchedRequests()
    }

}