Я запускаю некоторый код Scala (с библиотекой Java socialAuth Java), для которого требуется передать HTTPServletRequest в качестве параметра.Как протестировать код, которому необходимо пройти HTTPServletRequest
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 - это интерфейс, который означает, что он не может быть создан самостоятельно. Как, тогда он используется в коде?
EDIT: как в случае, когда метод принимает параметр HttpServletRequest в качестве параметра, какой класс реализации обычно передается?
Followup: На основании ответов, HttpServletRequest реализуется по-разному различными серверами; Идридер отметил, например, что 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
необходимо реализовать с помощью любой реализации HttpServletRequest, используемой сервером (Apache, Oracle и т. Д.), Как пользователь указывает это в otherClass
? Будет что-то вроде этого изменения:
//deleted line: --val mockRequest = mock(HttpServletRequest.class)
//changed line: myClass(provider, site, mockRequest) to below:
myClass(provider, site, javax.servlet.http.HttpServletRequest)
быть корректно интерпретировано и реализовано сервером?
Кажется, вы немного опережаете себя, если вы кодируете scala и не знаете, что такое интерфейс. Как работает признак? –
... Классы интерфейса реализации. Интерфейсы определяют контракт для базовой реализации. Интерфейсы не могут быть созданы, но классы * реализующие * интерфейсы могут. И нет, привязка кода к спецификации сервлета - не очень классный способ сделать что-либо, потому что тогда вы должны издеваться над материалом, который на самом деле является лишь тонким слоем между веб-клиентами и кодом, который делает важные вещи. –
Мне было интересно, если бы у кого-либо из вас был опыт работы с сервлетами Java и были знакомы с тем, какие классы-реализации HttpServletRequest наиболее часто используются при тестировании программ, которые принимают HttpServletRequest в качестве параметра –