2012-09-18 18 views
7

में अपवाद को फेंकने वाले विधि नाम को कैसे प्राप्त करें मेरे पास एक ऐसा पहलू है जो अपवाद के बाद चलता है मेरे टेस्टएनजी परीक्षण विधि से। मैं टेस्ट विधि का नाम अपने पहलू विधि में प्राप्त करना चाहता हूं।जावा

इस पर कोई विचार? कृपया नीचे अपना कोड नमूना लगता है:

पहलू:

pointcut publicCall(): call(public * *(..)); 

after() throwing (AssertionError e): publicCall() { 
    logger.debug("Assertion Error thrown"); 
    System.out.println("Threw an exception: " + e); 
} 

टेस्ट:

@Test 

public void testScenarioOne(){ 
    logger.debug("From Scenario One Test"); 
    Assert.assertEquals(true, false); 
} 

उत्तर

4

आप call से execution करने के लिए अपने pointcut प्रकार को बदलने की जरूरत:

pointcut publicMethod(): execution(public * *(..)); 

after() throwing (AssertionError e): publicMethod() { 
    System.out.println(thisJoinPointStaticPart.getSignature()); 
} 

संपादित करें: शायद यह भी क्लीनर होगा विशेष रूप से अवरोधन @Test एनोटेट तरीकों को:

import org.testng.annotations; 

public aspect TestExceptionInterceptor { 
    pointcut testMethod(): execution(@Test * *(..)); 

    after() throwing (AssertionError e): testMethod() { 
     System.out.println(thisJoinPointStaticPart.getSignature()); 
    } 
} 
+0

धन्यवाद !!! पॉइंटकट प्रकार को कॉल से निष्पादन में बदलना चाल था। (दूसरा स्निपेट संकलित नहीं हुआ था)। – rookie007r

+0

जहां तक ​​मुझे याद है, मैंने बस अपने संपादक से दूसरे स्निपेट की प्रतिलिपि बनाई और चिपकाया जहां यह ठीक है। क्या आप अधिक विशिष्ट हो सकते हैं? आपको कौन सा त्रुटि संदेश मिलता है? – kriegaex

+0

आपको मिली त्रुटि की संभावना थी क्योंकि आपको पूरी तरह से योग्य पैकेज जैसे पॉइंटकट testMethod(): निष्पादन (@ org.testng.annotations.Test * * (..)) निर्दिष्ट करने की आवश्यकता है; –

2

आप उपयोग कर सकते हैं:

thisJoinPoint.getSignature().getName() 

यद्यपि आप से सीधे अपवाद फेंक करना होगा आपकी परीक्षा विधि। Assert.equals() अपवाद फेंक रहा है आपकी परीक्षा विधि नहीं।

+1

मुझे लगता है कि thisStaticJoinPoint होगा भी काम करते हैं। –

+1

अच्छा ... धन्यवाद! लेकिन यह मुझे "assertEquels" विधि दे रहा है। मुझे टेस्ट विधि की आवश्यकता है (यानी testScenarioOne)। – rookie007r