Testing 使用Kotlin为http方法设置Spek测试?
如何使用kotlin启动spek测试,以测试是否调用了HTTP方法post?让我大吃一惊的是,我在模拟上下文方面遇到了困难。我想传入一个方法,而不是HttpMethod.POST来触发else块 当前失败,消息为-Testing 使用Kotlin为http方法设置Spek测试?,testing,kotlin,http-method,ratpack,spek,Testing,Kotlin,Http Method,Ratpack,Spek,如何使用kotlin启动spek测试,以测试是否调用了HTTP方法post?让我大吃一惊的是,我在模拟上下文方面遇到了困难。我想传入一个方法,而不是HttpMethod.POST来触发else块 当前失败,消息为- handlers.AHandlerTest > initializationError FAILED org.mockito.exceptions.base.MockitoException: Cannot mock/spy class ...hand
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不能为null
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") {
}
}
})
包处理程序
导入com.nhaarman.mockitokotlin2.doReturn
导入com.nhaarman.mockitokotlin2.mock
导入com.nhaarman.mockitokotlin2.verify
导入处理程序.AHandler
导入org.spekframework.spek2.Spek
导入org.spekframework.spek2.style.specification.description
导入ratpack.handling.Context
导入org.mockito.mockito
导入ratpack.http.HttpMethod
导入kotlin.test.assertEquals
导入kotlin.test.asserts失败
等级AHandlerTest:Spek({
val context=mock()
val httpReq=mock{
在{context.request.method}.doReturn(HttpMethod.DELETE)上
}
描述(“测试处理函数”){
它(“如果没有给出post方法,它应该失败”){
}
}
})
以下是帮助我通过考试的原因-
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
}
}
之后它通过了测试当你模拟
上下文
时,你是否指定它的请求
返回的内容?当前模拟的上下文如下-val context=Mockito.mock(context::class.java);我在模拟我想要返回的http请求,我相信:val-httpReq=mock{on{context.request.method}.doReturn(HttpMethod.DELETE)}您的AHandler
是最终的,所以您不能模拟它。另外,它看起来像是在测试一个andler,所以不应该模仿它。