有人在grails单元测试中使用了此注释吗?
似乎没有为我工作。
谢谢。
d

更新:我下面的测试的最后一行确实引发了预期的异常。但是,测试失败(堆栈跟踪对于此处而言太大...)。我正在使用grails 1.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")
}

最佳答案

当前仅支持JUnit 3,因此请使用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()实际上更方便,因为您可以在每个测试中多次使用ojit_code,并且ojit_code返回异常消息,因此您可以基于消息和异常进行断言。

关于unit-testing - Grails单元测试中的@ExpectedException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1982457/

10-14 16:12
查看更多