2010-06-01 14 views
18

असल में, मेरे पास एक टियरडाउन विधि है जिसे मैं कंसोल पर लॉग करना चाहता हूं जो परीक्षण अभी चलाया गया था। मैं उस स्ट्रिंग को पाने के बारे में कैसे जाउंगा?मुझे टेस्टिंग आंसू विधि में चलाए गए परीक्षण विधि का नाम कैसे प्राप्त किया जा सकता है?

मुझे कक्षा का नाम मिल सकता है, लेकिन मुझे वास्तविक विधि चाहिए जो अभी निष्पादित की गई थी।

public class TestSomething { 

    @AfterMethod 
    public void tearDown() { 
     system.out.println('The test that just ran was....' + getTestThatJustRanMethodName()'); 
    } 

    @Test 
    public void testCase() { 
     assertTrue(1==1); 
    } 
} 

चाहिए स्क्रीन पर उत्पादन: "परीक्षण है कि बस भाग गया था .... testcase"

हालांकि, मैं जादू है कि getTestThatJustRanMethodName वास्तव में होना चाहिए पता नहीं है।

उत्तर

34

अपने @AfterMethod में टाइप ITestResult की एक पैरामीटर के घोषित और TestNG यह इंजेक्षन जाएगा:

@AfterMethod 
public void afterMethod(ITestResult result) { 
    System.out.println("method name:" + result.getMethod().getMethodName()); 
} 
+0

tks, और मैं 'Reporter.setCurrentTestResult (परिणाम) का उपयोग करता हूं;' विधि – naive

18

आप विधि नाम से पहले परीक्षण आप निम्नलिखित का उपयोग कर सकते निष्पादित किया जाता है प्राप्त करना चाहते हैं:

import java.lang.reflect.Method; 

@BeforeMethod 
public void nameBefore(Method method) 
{ 
    System.out.println("Test name: " + method.getName());  
} 
+0

का परीक्षण करने के लिए रिपोर्ट स्ट्रीम को बदलने के लिए '@ AfterMethod'' के लिए भी काम करता है ... ओपी ने क्या पूछा;) –

2

बस java.lang.reflect.Method पैरामीटर घोषित करें।

@BeforeMethod 
public void beforeTestMethod(Method testMethod){ 
    System.out.println("Before Testmethod: " + testMethod.getName());  
} 

लेकिन TestNG inject एक बहुत अधिक करने के लिए आप की अनुमति देता है;)

  • किसी भी @Before विधि या @Test विधि प्रकार ITestContext की एक पैरामीटर घोषणा कर सकते हैं।
  • किसी भी @AfterMethod विधि प्रकार ITestResult की एक पैरामीटर है, जो परीक्षा पद्धति गया था कि बस चलाने का परिणाम को प्रतिबिंबित करेगा घोषणा कर सकते हैं।
  • किसी भी @Before और @After तरीकों प्रकार XmlTest की एक पैरामीटर है, जो वर्तमान टैग शामिल घोषणा कर सकते हैं।
  • किसी भी @BeforeMethod (और @AfterMethod) प्रकार java.lang.reflect.Method की एक पैरामीटर घोषणा कर सकते हैं। यह पैरामीटर परीक्षण विधि प्राप्त करेगा जिसे एक बार यह @BeforeMethod समाप्त हो जाएगा (या @AfterMethod के लिए चलने वाली विधि के बाद)।
  • किसी भी @BeforeMethod प्रकार Object[] की एक पैरामीटर घोषणा कर सकते हैं। यह पैरामीटर के रूप में java.lang.reflect.Method पैरामीटर के बारे में आगामी परीक्षा पद्धति, जो या तो TestNG से इंजेक्ट किया जा सकता है को खिलाया जा करने के लिए कर रहे हैं, इस तरह के की सूची प्राप्त करने या एक @DataProvider से आएगा।
  • किसी भी @DataProvider प्रकार ITestContext या java.lang.reflect.Method की एक पैरामीटर घोषणा कर सकते हैं।बाद वाला पैरामीटर परीक्षण विधि प्राप्त करेगा जो लागू होने वाला है।
0

एक और (हालांकि नहीं के रूप में सरल रूप में Cedric's answer) जिस तरह से TestNG यह है register a listener करने का समर्थन करता है कि:

@Listeners({MethodListener.class}) 
public class ListenerTest { 

    @Test 
    public void someTest() { 
    } 

} 

श्रोता कहाँ ऐसा दिखाई दे सकता:

public class MethodListener implements IInvokedMethodListener { 

    @Override 
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { 

    } 

    @Override 
    public void afterInvocation(IInvokedMethod method, ITestResult testResult) { 
    System.out.println(method.getTestMethod().getMethodName()); 
    } 
} 
यह विशेष रूप से

श्रोता कंसोल पर विधि नाम (यानी someTest) मुद्रित करेगा। इसे प्रत्येक निष्पादित परीक्षण के बाद निष्पादित किया जाएगा।

संबंधित मुद्दे

 संबंधित मुद्दे