2

Grails Web プラグインのテストを作成しようとしています。プラグインには、GrailsHttpSession を返す getSession() という関数を持つサービス (UtilityService) が含まれています。他のサービスはそれを使用して、セッション内の値を読み書きします。コードは正常に動作していますが、返されたセッション オブジェクトを使用する関数のテストを作成しようとすると、テストが失敗します。

この時点での私の目標は、 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 環境でセッションを利用できるようにするために何かする必要がありますか? 単体テストでこれを行うことは可能ですか、それとも統合テストである必要がありますか?

4

2 に答える 2