6

誰かがこの注釈をgrailsユニットテストで使用しましたか?私にはうまくいかなかったようです。ありがとう。D

更新:以下の私のテストの最後の行は、予期された例外をスローします。ただし、テストは失敗します(ここではスタックトレースが大きすぎます...)。私はgrails1.2を使用しており、Eclipseのjunitランナーでテストを実行しています。たぶん、grailsは4より前のバージョンのjunitを使用していますか?

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

1 に答える 1

17

現在サポートされているのはJUnit3のみなので、shouldFail()代わりに次を使用してください。

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()テストごとに複数回使用できるため、実際にはより便利です。また、例外メッセージが返されるため、メッセージと例外に基づいてアサートできます。

于 2009-12-30T23:38:04.550 に答える