นี่คือสิ่งที่ฉันทำสำหรับการย้อนกลับ
ฉันสร้างคลาส TestAppender:
public class TestAppender extends AppenderBase<ILoggingEvent> {
private Stack<ILoggingEvent> events = new Stack<ILoggingEvent>();
@Override
protected void append(ILoggingEvent event) {
events.add(event);
}
public void clear() {
events.clear();
}
public ILoggingEvent getLastEvent() {
return events.pop();
}
}
จากนั้นใน parent ของคลาส testng ของฉัน test ฉันสร้างวิธีการ:
protected TestAppender testAppender;
@BeforeClass
public void setupLogsForTesting() {
Logger root = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
testAppender = (TestAppender)root.getAppender("TEST");
if (testAppender != null) {
testAppender.clear();
}
}
ฉันมีไฟล์ logback-test.xml ที่กำหนดใน src / test / resources และฉันเพิ่ม appender ทดสอบ:
<appender name="TEST" class="com.intuit.icn.TestAppender">
<encoder>
<pattern>%m%n</pattern>
</encoder>
</appender>
และเพิ่ม appender นี้ใน appender ราก:
<root>
<level value="error" />
<appender-ref ref="STDOUT" />
<appender-ref ref="TEST" />
</root>
ตอนนี้ในชั้นเรียนการทดสอบของฉันที่ขยายจากระดับการทดสอบผู้ปกครองของฉันฉันจะได้รับ appender และได้รับข้อความล่าสุดเข้าสู่ระบบและตรวจสอบข้อความระดับระดับที่สามารถโยนได้
ILoggingEvent lastEvent = testAppender.getLastEvent();
assertEquals(lastEvent.getMessage(), "...");
assertEquals(lastEvent.getLevel(), Level.WARN);
assertEquals(lastEvent.getThrowableProxy().getMessage(), "...");
logger.getAllAppenders()
จากนั้นก้าวผ่านและโทรหาappender.setThreshold(Level.OFF)
แต่ละรายการ (และรีเซ็ตเมื่อคุณทำเสร็จแล้ว!) สิ่งนี้ทำให้แน่ใจได้ว่าข้อความ "ไม่ดี" ที่คุณพยายามสร้างไม่แสดงขึ้นในบันทึกการทดสอบและทำให้นักพัฒนารายต่อไปเสียสติ