Pergunta

Alguém usou essa anotação nos testes de unidade de Grails? Não parecia funcionar para mim. Obrigado. D

ATUALIZAÇÃO: A última linha do meu teste abaixo joga a exceção esperada. No entanto, o teste falha (rastreio de pilha muito grande aqui ...). Estou usando o Grails 1.2 e executando o teste no Junit Runner do Eclipse. Talvez o Grails esteja usando uma versão anterior do Junit que 4?

/**
 * Get the EC by a manager of a different company. Should throw exception
 */
@ExpectedException(ServiceAuthorizationException.class)
void testGetEcByNonOwnerManagerOfDifferentCompany() {
    mockDomain(ExpenseClaim , [new ExpenseClaim(id:"1",narrative:"marksClaim", employee:userMark, company:dereksCompany)])      

    def authControl = mockFor(AuthenticateService)
    authControl.demand.userDomain(1..1)  {-> otherUserMgr }
    authControl.demand.ifAllGranted(1..1)  {String arg1 -> return "ROLE_COMPANYMANAGER".equals(arg1) } //returns true
    def testService = new ExpenseClaimService()
    testService.authenticateService = authControl.createMock()
    def thrown = false
    testService.getExpenseClaim("1")
}
Foi útil?

Solução

Somente o Junit 3 é suportado atualmente, então use shouldFail() em vez de:

void testGetEcByNonOwnerManagerOfDifferentCompany() {

  shouldFail(ServiceAuthorizationException) {
    mockDomain(ExpenseClaim , [new ExpenseClaim(id:"1",
                               narrative:"marksClaim", employee:userMark,
                               company:dereksCompany)])      

    def authControl = mockFor(AuthenticateService)
    authControl.demand.userDomain(1..1)  {-> otherUserMgr }
    authControl.demand.ifAllGranted(1..1)  {String arg1 ->
       "ROLE_COMPANYMANAGER".equals(arg1) } //returns true
    def testService = new ExpenseClaimService()
    testService.authenticateService = authControl.createMock()
    testService.getExpenseClaim("1")
  }
}

shouldFail() é realmente mais conveniente, pois você pode usá -lo mais de uma vez por teste e ele retorna a mensagem de exceção para que você possa afirmar com base na mensagem e na exceção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top