Я пытаюсь написать тесты для веб-плагина Grails. Плагин содержит службу (UtilityService), которая имеет функцию getSession(), которая возвращает GrailsHttpSession. Другие службы используют это для чтения/записи значений в сеансе. Код работает нормально, но когда я пытаюсь написать тесты для любой функции, использующей возвращаемый объект сеанса, тесты терпят неудачу.
Моя цель на данный момент — просто написать тест, который доказывает, что утилитаService.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
Вопросы. Нужно ли что-то сделать, чтобы сделать сеанс доступным в тестовой среде? Можно ли это сделать в модульном тесте или это должен быть интеграционный тест?
getSession()
- person erichelgeson   schedule 10.03.2017getSession
, который будут вызывать другие службы. Любая служба может реализоватьgrails.web.api.ServletAttributes
, а затем в коде этой службы можно просто ссылаться наsession
. - person Jeff Scott Brown   schedule 10.06.2019