2009-12-30 23 views
6

Chiunque ha utilizzato questa annotazione nei test delle unità di Grails? Sembra non funzionare per me. Grazie. D@ExpectedException nei test delle unità di graal

Aggiornamento: l'ultima riga del mio test di seguito genera l'eccezione prevista. Tuttavia, il test non riesce (traccia di stack troppo grande per qui ...). Sto usando Grails 1.2 ed eseguo il test nel junit runner di eclipse. Forse i graal usano una versione precedente di junit di 4? Solo

/** 
* 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

Puoi spiegare cosa intendi con "non ha funzionato"? –

+0

Ciao John, Grazie per l'aiuto. Sì, mi manca un po 'di dettagli ... Aggiungerò una risposta perché non riesco a inserirmi in questa casella di commento. D – Derek

+0

Ah si sta usando junit 3.4.2. Penso che funzioni solo con junit4. Penso che questa sia la risposta – Derek

risposta

17

JUnit 3 è attualmente supportato, in modo da utilizzare shouldFail() invece:

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() è in realtà più conveniente dal momento che è possibile utilizzare più di una volta per test, e restituisce il messaggio di eccezione in modo da può affermare in base al messaggio e all'eccezione.

+1

Grazie Burt! funziona perfettamente – Derek

+0

è ancora applicabile a 1.3.7? – dbrin

+1

A partire da 2.0 è possibile utilizzare JUnit 4, ma come ho detto, utilizzerei comunque shouldFail poiché è così flessibile. –

Problemi correlati