代码之家  ›  专栏  ›  技术社区  ›  Derek

@grails单元测试中的ExpectedException

  •  6
  • Derek  · 技术社区  · 16 年前

    有人在grails单元测试中使用过这个注释吗? 谢谢

    更新:下面测试的最后一行确实抛出了预期的异常。但是,测试失败(堆栈跟踪太大,此处不适用…)。我正在使用Grails1.2并在eclipse的junit runner中运行测试。也许grails使用的是比junit 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")
    }
    
    1 回复  |  直到 16 年前
        1
  •  17
  •   Rob Hruska MegalomanINA    15 年前

    目前只支持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")
      }
    }
    

    应该失败 实际上更方便,因为您可以在每个测试中多次使用它,并且它返回异常消息,以便您可以基于消息和异常进行断言。

    推荐文章