Настройка теста Spek для http-методов с использованием Kotlin?

Как запустить spek-тест с помощью kotlin, чтобы проверить, была ли вызвана запись метода HTTP? Что меня сбивает с толку, так это то, что у меня проблемы с макетированием контекста. Я хотел бы передать метод, отличный от HttpMethod.POST, чтобы запустить блок else.

В настоящее время происходит сбой с сообщением -

    handlers.AHandlerTest > initializationError FAILED
    org.mockito.exceptions.base.MockitoException: 
    Cannot mock/spy class ...handlers.AHandler
    Mockito cannot mock/spy because :
     - final class
        at handlers.AHandlerTest$1.invoke(AHandlerTest.kt:76)
        at handlers.AHandlerTest$1.invoke(AHandlerTest.kt:17)

Также не получается сказать, что context.request не может быть нулевым

import ratpack.handling.Context

class AHandler : Handler {

 override fun handle(contex: Context) {
        when (contex.request.method) {
            HttpMethod.POST -> create(contex)
            else -> {
                contex.response.status(405)
                contex.render("Unsupported method. Supported methods are: POST")
            }
        }
 }
}

тестовый файл:


package handlers

import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.verify
import handlers.AHandler
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe
import ratpack.handling.Context

import org.mockito.Mockito
import ratpack.http.HttpMethod
import kotlin.test.assertEquals
import kotlin.test.assertFails


class AHandlerTest: Spek({


    val context = mock<Context>()

    val httpReq = mock<Context> {
        on { context.request.method }.doReturn(HttpMethod.DELETE)
    }


    describe("testing handler function") {
        it("it should fail when not given a post method") {


        }
    }
})


person sisternight438    schedule 05.12.2019    source источник
comment
Когда вы издеваетесь над context, вы указываете, что возвращает его request?   -  person Bananon    schedule 06.12.2019
comment
в настоящее время издевается над контекстом, подобным этому - val context = Mockito.mock(Context::class.java);   -  person sisternight438    schedule 06.12.2019
comment
Я издеваюсь над типом http-запроса, который я хочу вернуть, я думаю, с этим: val httpReq = mock‹Context› { on { context.request.method }.doReturn (HttpMethod.DELETE) }   -  person sisternight438    schedule 06.12.2019
comment
Ваш AHandler является окончательным, поэтому вы не можете над ним издеваться. Кроме того, похоже, что вы тестируете AHandler, поэтому вам не следует над ним издеваться.   -  person Bananon    schedule 06.12.2019


Ответы (1)


вот что помогло мне его пройти -

describe("testing handle function") {
  it("it should fail when not given a post method") {
            val aHandler = AHandler();
            val result = RequestFixture.handle(aHandler, Action {request ->
                request.method("DELETE")
            })
            result.status.code shouldEqual 405

        }
    }

он прошел тест после этого

person sisternight438    schedule 10.12.2019