我正在尝试为 Grails 网络插件编写测试。该插件包含一个服务 (UtilityService),该服务具有一个名为 getSession() 的函数,该函数返回 GrailsHttpSession。其他服务使用它来读取/写入会话中的值。代码工作得很好,但是当我尝试为使用返回的会话对象的任何函数编写测试时,测试失败。
在这一点上,我的目标是简单地编写一个测试来证明 utilityService.getSession() 正在返回一些东西。
我目前正在使用 Grails 3.2.7
实用服务:
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
psu.util.UtilityService@28eab745
问题: 我需要做些什么才能使会话在 TEST 环境中可用?是否可以在单元测试中执行此操作,还是必须是集成测试?