2009-12-30 4 views
6

Quelqu'un a utilisé cette annotation dans les tests unitaires de gravier? N'a pas l'air de travailler pour moi. Merci. D@ExpectedException dans les tests unitaires de gravier

Mise à jour: la dernière ligne de mon test ci-dessous jette l'exception attendue. Cependant le test échoue (trace de pile trop grande pour ici ...). J'utilise grails 1.2 et exécute le test dans le coureur de junit d'eclipse. Peut-être que Grails utilise une version antérieure de 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") 
} 
+2

Pouvez-vous expliquer ce que vous entendez par "ne fonctionne pas"? –

+0

Salut John, Merci pour l'aide. Oui, je manque un peu de détail là .... Je vais ajouter une réponse car je ne peux pas l'adapter dans cette boîte de commentaires. D – Derek

+0

Ah oui c'est l'utilisation de junit 3.4.2. Je pense que cela ne fonctionne qu'avec junit4. Je pense que c'est la réponse – Derek

Répondre

17

Seulement JUnit 3 est actuellement pris en charge, alors utilisez shouldFail() à la place:

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() est en réalité plus pratique puisque vous pouvez l'utiliser plus d'une fois par test, et il renvoie le message d'exception afin que vous peut affirmer sur la base du message ainsi que l'exception.

+1

Merci Burt! fonctionne parfaitement. – Derek

+0

est-ce encore applicable à partir de 1.3.7? – dbrin

+1

A partir de la version 2.0, vous pouvez utiliser JUnit 4, mais comme je l'ai dit, j'utiliserai toujours shouldFail car il est très flexible. –