2009-12-30 5 views
6

¿Alguien usó esta anotación en las pruebas de la unidad de grails? Parece que no funciona para mí. Gracias. D@ExpectedException en las pruebas de la unidad de grails

Actualización: la última línea de mi prueba a continuación lanza la excepción esperada. Sin embargo, la prueba falla (el seguimiento de pila es demasiado grande para aquí ...). Estoy usando Grails 1.2 y ejecutando la prueba en el corredor de eclipse. ¿Tal vez Grails está usando una versión anterior de junit que 4? Sólo

/** 
* 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") 
} 
+2

¿Puedes explicar a qué te refieres con "no funcionó"? –

+0

Hola John, Gracias por la ayuda. Sí, me falta un poco de detalle allí ... Añadiré una respuesta porque no puedo introducirla en este cuadro de comentarios. D – Derek

+0

Ah sí está usando junit 3.4.2. Creo que esto solo funciona con junit4. Creo que esta es la respuesta – Derek

Respuesta

17

se admite actualmente JUnit 3, a fin de utilizar shouldFail() lugar:

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() en realidad es más conveniente ya que se puede usar más de una vez por prueba, y se devuelve el mensaje de excepción por lo que puede afirmar en función del mensaje y la excepción.

+1

Gracias Burt! funciona perfecto – Derek

+0

¿esto todavía se aplica a partir de 1.3.7? – dbrin

+1

A partir de 2.0 puede usar JUnit 4, pero como dije, aún usaría shouldFail ya que es muy flexible. –

Cuestiones relacionadas