Terima kasih banyak atas jawaban yang cepat dan bermanfaat ini; mereka menempatkan saya di jalan yang benar untuk solusi saya.
Basis kode yang saya ingin gunakan ini, menggunakan java.util.logging sebagai mekanisme logger, dan saya tidak merasa cukup di rumah dalam kode-kode untuk benar-benar mengubahnya ke log4j atau untuk logger antarmuka / fasad. Tapi berdasarkan saran ini, saya 'meretas' ekstensi julhandler dan itu berfungsi sebagai hadiah.
Ringkasan singkat berikut. Perpanjang java.util.logging.Handler
:
class LogHandler extends Handler
{
Level lastLevel = Level.FINEST;
public Level checkLevel() {
return lastLevel;
}
public void publish(LogRecord record) {
lastLevel = record.getLevel();
}
public void close(){}
public void flush(){}
}
Jelas, Anda dapat menyimpan sebanyak yang Anda suka / inginkan / butuhkan dari LogRecord
, atau mendorong semuanya ke dalam tumpukan sampai Anda mendapatkan kelebihan.
Dalam persiapan untuk uji junit, Anda membuat java.util.logging.Logger
dan menambahkan yang baru LogHandler
ke dalamnya:
@Test tester() {
Logger logger = Logger.getLogger("my junit-test logger");
LogHandler handler = new LogHandler();
handler.setLevel(Level.ALL);
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.setLevel(Level.ALL);
Panggilan untuk setUseParentHandlers()
adalah untuk membungkam para penangan normal, sehingga (untuk uji coba uji coba ini) tidak terjadi penebangan yang tidak perlu. Lakukan apa pun yang perlu diuji-kode oleh Anda untuk menggunakan logger ini, jalankan tes dan tegaskan Kesetaraan:
libraryUnderTest.setLogger(logger);
methodUnderTest(true); // see original question.
assertEquals("Log level as expected?", Level.INFO, handler.checkLevel() );
}
(Tentu saja, Anda akan memindahkan sebagian besar pekerjaan ini ke dalam @Before
metode dan membuat berbagai macam perbaikan lainnya, tetapi itu akan mengacaukan presentasi ini.)
logger.getAllAppenders()
, lalu melangkah maju dan memanggilappender.setThreshold(Level.OFF)
masing-masing (dan mengatur ulang mereka ketika Anda selesai!). Ini memastikan bahwa pesan "buruk" yang Anda coba hasilkan tidak muncul di log pengujian dan membuat takut pengembang berikutnya.