0
我正在嘗試編寫Grails Web插件的測試。該插件包含一個服務(UtilityService),該服務具有一個名爲getSession()的函數,該函數返回GrailsHttpSession。其他服務使用它來讀取/寫入會話中的值。代碼工作得很好,但是當我嘗試爲使用返回的會話對象的任何函數編寫測試時,測試失敗。如何測試從HTTP會話中檢索信息的Grails服務
我在這一點上的目標是簡單地寫一個測試,證明utilityService.getSession()返回的東西。
我目前工作的Grails 3.2.7
UtilityService:
package psu.util
import grails.transaction.Transactional
import grails.core.GrailsApplication
import grails.util.Environment
import grails.core.*
import org.grails.web.util.WebUtils
import org.springframework.web.context.request.RequestContextHolder
import javax.servlet.http.HttpServletRequest
@Transactional
class UtilityService {
GrailsApplication grailsApplication
@Transactional(readOnly = true)
grails.web.servlet.mvc.GrailsHttpSession getSession(){
return WebUtils.retrieveGrailsWebRequest()?.session
}
}
測試:
package psu.util
import grails.test.mixin.TestFor
import grails.test.mixin.integration.Integration
import grails.transaction.*
import spock.lang.*
@Integration
@Rollback
@TestFor(UtilityService)
class UtilityServiceIntegrationSpec extends Specification {
def setup() {
}
def cleanup() {
}
void "test getSession"() {
expect:
service.getSession()
}
}
測試輸出:
Condition not satisfied:
service.getSession()
| |
| null
[email protected]
問題: 有什麼我需要做的,使會議在測試環境中可用?是否有可能在單元測試中做到這一點,還是必須進行集成測試?
無關你的問題,但你並不需要一個交易來獲得一個會話,你打開一個到數據庫的連接,併爲你的'getSession()'做任何事情 – erichelgeson