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
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);
}
}
Nasıl belirli bir durum JUnit 4 Test a...
Nasıl yanlış düzenleme Mercurial mesaj...
svn: çözmek için nasıl "yerel düz...
Nasıl bir aramak için commit github me...
Nasıl komut satırından JUnit test duru...