我正在运行一些需要将 HTTPServletRequest 作为参数传入的 Scala 代码(使用 Java socialAuth 库)。
def myClass(prov: String, site: String, request: HttpServletRequest): {
//some initial code here
val session = request.getSession()
session.setAttribute(/*some params*/)
//code continues...
}
所以 HttpServletRequest 似乎是一种非常酷的存储会话变量和在方法之间传递会话的方法。但是,我不太确定如何测试这段代码,因为我不太了解 HttpServletRequest 接口是什么。
我做了一些研究,但我想知道是否有人可以为我澄清。 HttpServletRequest是一个接口,这意味着它不能自己实例化。那么它是如何在代码中使用的呢?
编辑:如,当一个方法将 HttpServletRequest 作为参数时,通常会传入什么实现类?
FOLLOWUP:根据给出的答案,不同服务器实现的HttpServletRequest不同;Ireeder 指出,例如,Apache 甚至有多个实现。那么,代码如何指定服务器需要使用它的实现呢?换句话说,假设我有使用 myClass 的测试代码:
def otherClass(){
val site = "www.example.com"
val provider = "twitter"
val mockRequest = mock(HttpServletRequest.class) //using https://code.google.com/p/mockito/. (eclipse throws error..not too sure about syntax but throwing up this example quickly, so will edit later)
myClass(provider, site, mockRequest)
}
我认为这对于测试来说是可以的,因为 Mockito 创建了一个模拟对象,但是当需要在服务器上实现 otherClass() 时,它的代码是如何调整的?(抱歉,我对此有点陌生,所以请多多包涵……)如果val mockRequest
需要使用服务器(Apache、Oracle 等)使用的任何 HttpServletRequest 实现来实现,用户如何在其中指定otherClass
?会发生这样的变化:
//deleted line: --val mockRequest = mock(HttpServletRequest.class)
//changed line: myClass(provider, site, mockRequest) to below:
myClass(provider, site, javax.servlet.http.HttpServletRequest)
由服务器正确解释和实现?