[英]How to mock a HttpServletRequest's BufferedReader payload in Grails/Spock
我有一個Grails控制器,需要一個XML有效負載。
我在Grails控制器中獲取這樣的XML有效負載。
def xmlPayload = request.reader.text
那部分工作正常,但我正在努力在單元測試中模擬這個有效載荷。
我已經嘗試了以下兩種方法,但調試器在兩種方法中都顯示'request.reader'為null。
方法#1:
void "test controller method"(){
setup:
def mockBufferedReader = Mock( BufferedReader )
mockBufferedReader.getText() >> '<hello/>'
request.getReader() >> mockBufferedReader
....
方法#2:
void "test controller method"(){
setup:
def mockBufferedReader = Mock( BufferedReader )
mockBufferedReader.getText() >> '<hello/>'
request.metaClass.getReader = { -> mockBufferedReader }
....
單元測試中的'request'是GrailsMockHttpServletRequest,所以我假設我可以像這樣模擬它的方法(兩種方法的第3行),但到目前為止還沒有運氣。
謝謝你的任何想法。
你可以做:
class EchoController {
def echo () {
render (request.reader.text)
}
}
@TestFor(EchoController)
class EchoSpec extends Specification {
def "echos XML data" () {
request.XML = '<hello/>'
when:
controller.echo ()
then:
response.text == '<hello/>'
}
}
請參閱在單元測試控制器中 測試XML和JSON請求 。
如果您只需要為請求提供內容,那么您不需要模擬任何內容。
def "Spock works as expected"() {
given:
def request = new GrailsMockHttpServletRequest(content: '<hello/>')
when:
def result = request.getReader().getText()
then:
result == '<hello/>'
}
這種Mock類的一個目的(如Spring Test等)是為了避免使用外部庫進行顯式模擬 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.