2009-12-30 47 views
6

Bất kỳ ai sử dụng chú thích này trong các bài kiểm tra đơn vị grails? Dường như không làm việc cho tôi. Cảm ơn. D@ExpectedException trong thử nghiệm đơn vị grails

Cập nhật: dòng cuối cùng của thử nghiệm của tôi dưới đây sẽ ném ngoại lệ dự kiến. Tuy nhiên, kiểm tra không thành công (Stack trace quá lớn cho ở đây ...). Tôi đang sử dụng grails 1.2 và chạy thử nghiệm trong runner junit của eclipse. Có lẽ grails đang sử dụng phiên bản cũ hơn của junit hơn 4? Chỉ

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

Bạn có thể giải thích ý của mình bằng cách "không hoạt động" không? –

+0

Xin chào John, Cảm ơn sự giúp đỡ. Có, tôi thiếu một chút chi tiết ở đó .... Tôi sẽ thêm câu trả lời vì tôi không thể trả lời trong hộp nhận xét này. D – Derek

+0

Ah có sử dụng junit của nó 3.4.2. Tôi nghĩ rằng điều này chỉ hoạt động với junit4. Tôi nghĩ đây là câu trả lời – Derek

Trả lời

17

JUnit 3 hiện đang được hỗ trợ, vì vậy sử dụng shouldFail() thay vì:

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() thực sự là thuận tiện hơn vì bạn có thể sử dụng nó nhiều hơn một lần mỗi thử nghiệm, và nó sẽ trả về thông điệp ngoại lệ, do đó bạn có thể khẳng định dựa trên thông điệp cũng như ngoại lệ.

+1

Cảm ơn Burt! hoạt động hoàn hảo. – Derek

+0

là điều này vẫn còn áp dụng như là 1,3,7? – dbrin

+1

Kể từ 2.0 bạn có thể sử dụng JUnit 4, nhưng như tôi đã nói tôi vẫn sẽ sử dụng shouldFail vì nó rất linh hoạt. –