سؤال

أي شخص استخدم هذا التعليق التوضيحي في اختبارات وحدة Grails؟ لا يبدو أنه يعمل من أجلي. شكرًا. د

تحديث: السطر الأخير من الاختبار أدناه يرمي الاستثناء المتوقع. ومع ذلك فشل الاختبار (تتبع المكدس كبير جدًا هنا ...). أنا أستخدم Grails 1.2 وتشغيل الاختبار في عداء Junit Eclipse. ربما تستخدم 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")
}
هل كانت مفيدة؟

المحلول

فقط 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() هو في الواقع أكثر ملاءمة حيث يمكنك استخدامه أكثر من مرة لكل اختبار ، ويعيد رسالة الاستثناء حتى تتمكن من تأكيد بناء الرسالة وكذلك الاستثناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top