2010-07-14 12 views
6

मैं टेस्टएनजी परीक्षण निष्पादित कर रहा हूं, और लॉगिंग आउटपुट DEBUG पर सेट है, इसलिए विफलता के मामले में मैं वास्तव में गलत क्या हो सकता है इसका निरीक्षण कर सकता हूं।टेस्टएनजी परीक्षण निष्पादित करते समय Log4j आउटपुट को कैप्चर करना

समस्या यह है कि आउटपुट अत्यंत वर्बोज़ है, और यह चलने पर हर किसी को परेशान कर रहा है। मैं सभी लॉग 4 जे लॉगिंग घटनाओं को कैप्चर करना चाहता हूं - जो आसान है - और परीक्षण विफल होने पर केवल उन्हें प्रिंट करें। इसके अलावा, मुझे @Before/@After विधियों को ध्यान में रखना और उनके लिए आउटपुट प्रिंट करना होगा।

मान लिया जाये कि मैं पहले से ही Log4J LoggingEvent रों की एक सूची है, मैं उन मुद्रित कर सकते हैं केवल जब Test/After/Before तरीकों असफल?

उत्तर

2

org.testng.ITestListener लागू और पंजीकरण करें और कॉलबैक विधियों पर प्रतिक्रिया दें।

1

This site has a explanation on how to do it.। यदि लिंक मर जाता है तो मैंने यहां कोड भाग की प्रतिलिपि बनाई है।

Logger.getLogger(this.getClass()) 
log4j.rootLogger=ERROR,TESTAPPENDER 
log4j.appender.TESTAPPENDER=com.my.fantastic.MockedAppender 
import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 

public class FooTest { 
    private Appender appenderMock; 
    @Before 
    public void setupAppender() { 
     appenderMock = mock(Appender.class); 
     Logger.getRootLogger().addAppender(appenderMock); 
    } 
    @After 
    public void removeAppender() { 
     Logger.getRootLogger().removeAppender(appenderMock); 
    } 
    @Test 
    public void testMethod() { 
     doStuffThatCausesLogging(); 
     verify(appenderMock).doAppend((LoggingEvent) anyObject()); 
    } 
} 

ArgumentCaptor arguments = ArgumentCaptor.forClass(LoggingEvent.class); 
verify(appenderMock).doAppend(arguments.capture()); 

assertThat (। Arguments.getValue() getLevel(), (है Level.WARN));

+0

धन्यवाद, यह किसी भी तरह से संबंधित है, लेकिन मैं के लिए क्या देख रहा हूँ नहीं। –

+1

प्रश्न का उत्तर नहीं देता है। – user43685

+0

@ user43685: आप सही हैं, मैंने इसे कम कचरा जवाब देने के लिए कुछ स्रोत कोड जोड़ा। – Sardathrion

4

रिपोर्ट पर संदेश लॉग करने के लिए Reporter.log (str) का उपयोग करें।

@AfterMethod 
public void printLOGonFailure(ITestResult result) { 
    if (result.getStatus() == ITestResult.FAILURE) { 
     String str = getLog(); 
     Reporter.log(str); 
    } 
} 
0

निर्भरता में जेमॉकिट रखें। लॉगिंग परीक्षण के साथ यह बहुत आसान है। परीक्षण कक्षा में

रख:

 @Cascading 
final static Logger logging = Logger.getLogger(<some your>.class); 

परीक्षा में रखो:

testedFunction(a, b, c); 
    new Verifications() {{ 
     logging.error("The message that should be output"); 
     logging.info("Another message"); 
    }}; 
संबंधित मुद्दे