SORU
1 Aralık 2009, Salı


Nasıl bir junit bir logger bir mesaj belirt

Java logger durumunu rapor etmeye davet eden kod-altında-sınavım var. Junit test kodunda, doğru günlük girdisi bu logger yapılmış olduğunu doğrulamak istiyorum. Aşağıdaki satırlar boyunca bir şey:

methodUnderTest(bool x){
    if(x)
        logger.info("x happened")
}

@Test tester(){
    // perhaps setup a logger first.
    methodUnderTest(true);
    assertXXXXXX(loggedLevel(),Level.INFO);

Bu özel uyarlama logger (veya) işleyici, ya da biçimlendiricisi ile yapılabilir sanırım, ama yeniden kullanmak için varolan bir çözümü tercih ederim. (Ve dürüst olmak gerekirse, bir logger gelen logRecord nasıl benim için açık değil, ama o thatś mümkün sanırım.)

CEVAP
1 Aralık 2009, Salı


Bu birkaç kez ihtiyacım olmadı. Birlikte ihtiyaçlarınıza göre ayarlamak istersin küçük bir örnek koydum. Temelde, Appender kendi oluşturun ve istediğiniz logger ekleyin. Eğer her şeyi toplamak istiyorsanız, root logger başlamak için iyi bir yerdir, ama eğer isterseniz daha özel bir kullanabilirsiniz. İşiniz bittiğinde Appender kaldırmak için unutmayın, aksi takdirde bir bellek sızıntısı oluşturabilirsiniz. Test içinde yaptım aşağıda, ama setUp @Before tearDown @After daha iyi yerlere, sizin ihtiyaçlarınıza bağlı olarak olabilir.

Ayrıca, uygulama aşağıdaki bellek List Her şeyi toplar. Eğer günlük bir çok şey olabilir düşünün ekleyerek bir filtre damla sıkıcı girişleri veya yazmaya günlüğüne geçici bir dosya üzerinde disk (İpucu: LoggingEvent Serializable, Bu yüzden olabilir sadece seri hale getirmek olay nesneleri, eğer günlük mesaj.)

import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class MyTest {
    @Test
    public void test() {
        final TestAppender appender = new TestAppender();
        final Logger logger = Logger.getRootLogger();
        logger.addAppender(appender);
        try {
            Logger.getLogger(MyTest.class).info("Test");
        }
        finally {
            logger.removeAppender(appender);
        }

        final List<LoggingEvent> log = appender.getLog();
        final LoggingEvent firstLogEntry = log.get(0);
        assertThat(firstLogEntry.getLevel(), is(Level.INFO));
        assertThat((String) firstLogEntry.getMessage(), is("Test"));
        assertThat(firstLogEntry.getLoggerName(), is("MyTest"));
    }
}

class TestAppender extends AppenderSkeleton {
    private final List<LoggingEvent> log = new ArrayList<LoggingEvent>();

    @Override
    public boolean requiresLayout() {
        return false;
    }

    @Override
    protected void append(final LoggingEvent loggingEvent) {
        log.add(loggingEvent);
    }

    @Override
    public void close() {
    }

    public List<LoggingEvent> getLog() {
        return new ArrayList<LoggingEvent>(log);
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012
  • XxMinayaxX1

    XxMinayaxX1

    9 Mayıs 2012