Как я могу внедрить что-то в сеанс при модульном тестировании сервиса - PullRequest
1 голос
/ 01 декабря 2010

Я написал сервис, который читает переменную сеанса CAS ...

package cp


import edu.yale.its.tp.cas.client.filter.CASFilter
import javax.servlet.http.HttpSession
import org.springframework.web.context.request.RequestContextHolder

class AuthorizeService {

 def username
 def loginError
 def permissions

 def authCheck( String pageController, String pageAction ) {

  username = getSession().getAttribute(CASFilter.CAS_FILTER_USER)

.....
Omitted the rest of this to save space.  
.....

 }

 private HttpSession getSession() {
  return RequestContextHolder.currentRequestAttributes().getSession()
 }

Я не могу понять, как поместить что-то в сеанс в моем тесте, чтобы этот фрагмент кода работал.

Вот тест:

package cp

import grails.test.*

    class AuthorizeServiceTests extends GroovyTestCase {

     def AuthorizeService

     protected void setUp() {
      super.setUp()
     }

     protected void tearDown() {
      super.tearDown()
     }

     void testAuthCheck() {

      def isAuthorized

      // No username in the session
       isAuthorized = AuthorizeService.authCheck( 'welcome', 'index' )
       assertEquals false, isAuthorized

      // Mock the username to the rest of the tests work
       mockSession["CASFilter.CAS_FILTER_USER"] = "testUser" 


    .....
    Omitted the rest of this to save space.  
    .....

     }

Когда я запускаю свой тест, я получаю сообщение об ошибке:

Нет такого свойства: mockSession для класса: cp.AuthorizeServiceTests groovy.lang.пытаясь найти способ внедрить что-то в mockSession или что-то подобное, чтобы я мог протестировать этот сервис.Я могу видеть, где было бы довольно легко проверить это, если бы это был контроллер, но кажется, что сервисы - это совсем другое животное.

В качестве фона я портирую работающее приложение PHP наGrails ... Я - парень из PHP, и это мой первый опыт работы с Grails, поэтому я прошу прощения, если это нубский вопрос.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2014

Граальс 2.3.4:

import grails.util.GrailsWebUtil

class SomeTests extends GroovyTestCase {

    void testSomething() {
        def request = GrailsWebUtil.bindMockWebRequest()
        def myDummyObject = new DummyObject()
        request.session['myDummyObject'] = myDummyObject

        // Run your code and make asserts
    }
}
1 голос
/ 02 декабря 2010

посмотрите на MockUtils

и попробуйте ControllerUnitTestCase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...