Интеграционные тесты начали проваливаться с обновлением Grails - PullRequest
0 голосов
/ 16 мая 2011

Я обновил приложение grails с 1.2.2 до 1.3.7 после этого обновления, несколько интеграционных тестов начали выдавать следующую ошибку: validateAndSaveList - это метод службы, используемой службой, которую я проверяю. Эти тесты проходили перед обновлением, и они также пройдут, если я запусту только фазу интеграционного теста с grails test-app -integration

junit.framework.AssertionFailedError: Больше нет вызовов «validateAndSaveList» ожидается в этот момент. Конец чего-либо требования.

Код:

import com.e.domain.*
import com.e.exception.GORMServiceException
import com.e.controller.SecurityUserCommand



class AccountServiceTests extends GroovyTestCase
{
def accountService

void testRegisterWithMinimumInfo()
{
    def clinic = new Clinic(name:'clinicName')
    def securityUserCommand = new SecurityUserCommand(username:'username', password:"password", confirm:"password")
    def clinicUser = new ClinicUser(firstName:'fname', lastName:'lname', emailAddress:'abc@abc.com')
    clinicUser.clinic = clinic
    //clinicUser.securityUser = securityUser
    clinic.address = new Address()
    //  TODO - JsecUser no longer in use        
    def role = new ShiroRole(name:'TEST')
    //def subscription = ESubscription.findByName('Charter Member')
    def subscription = new ESubscription(
        name:'Charter Member',
        description:'Charter Member',
        periodType:'Monthly',
        numPeriods:12,
        amountPerPeriod:25.00,
        electronicSubmissionRate:0.00,
        accountingRate:0.01,
        numAllowedUsers:4,
        startDate: today -1,
        endDate: today+1
    )
    subscription.save(flush:true)
    if(subscription.hasErrors())
    println subscription.errors
    assertNotNull subscription
    clinicUser.empathicCustomerProfile.subscription = subscription
    def result = accountService.register(clinic, securityUserCommand, clinicUser, role)
    assert result.success
    assert result.clinic.id
    assert result.securityUser?.id
    assert result.clinicUser.id
}

StackTrace

junit.framework.AssertionFailedError: No more calls to 'validateAndSaveList' expected at this point. End of demands.
 at grails.test.MockClosureProxy.doBeforeCall(MockClosureProxy.java:66)
 at grails.test.AbstractClosureProxy.call(AbstractClosureProxy.java:74)
 at grails.test.GrailsMock$_createMock_closure1.doCall(GrailsMock.groovy:125)
 at com.e.service.AccountService.register(AccountService.groovy:46)
 at com.e.service.AccountService$register.call(Unknown Source)
 at AccountServiceTests.testRegisterWithMinimumInfo(AccountServiceTests.groovy:53)

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Основная проблема, как видно из @hvgotcodes, заключается в том, что для службы существовал фиктивный объект, хотя в данном тесте не происходило насмешек.

Это произошло в Граалсе 1.3.7

Я нашел модульный тест, который выполнял следующее:

    def dataBindServiceControl = mockFor(DataBindService)
    dataBindServiceControl.demand.safeBind{}
    dataBindServiceControl.demand.extractPhones{}
    dataBindServiceControl.demand.validateAndSaveList{l-> return true}
    def dataBindService = dataBindServiceControl.createMock()
    controller.dataBindService = dataBindService

Если бы эти тесты были удалены, то все интеграционные тесты прошли бы, поэтому для решения без переписывания тестов я добавил следующее к методу демонтажа.

    GroovySystem.metaClassRegistry.removeMetaClass(DataBindService)

С этим дополнением тесты теперь работают корректно в Grails 1.3.7

1 голос
/ 16 мая 2011

этот ответ приходит от разработки вопроса в комментариях:

исключение, которое вы получаете, ясно указывает на то, что где-то вы поместили фиктивный объект в свой сервис, и сервис вызывает фиктивный объект так, как он не был настроен для обработки.

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