Pengenalan:
Menguji kelakuan kod yang berkomunikasi dengan luaran sistem selalunya melibatkan pengesahan kandungan dan format mesej yang dihasilkan. Di Jawa, pengelogan adalah cara biasa untuk merekodkan mesej tersebut. Artikel ini meneroka cara untuk melaksanakan ujian unit pada entri log menggunakan rangka kerja JUnit.
Penegasan JUnit pada Mesej Log:
Coretan kod yang disediakan dalam soalan bertujuan untuk menegaskan bahawa entri log tertentu dengan tahap tertentu (cth., INFO) dan mesej ("x berlaku") telah dijana oleh kod yang sedang diuji. Untuk mencapai matlamat ini, anda boleh menggunakan pembalak tersuai atau pengendali yang memintas dan menyimpan peristiwa log.
Pendekatan Logger/Pengendali Tersuai:
Pendekatan ini memerlukan penciptaan pembalak khusus atau pengendali yang menangkap peristiwa pembalakan. Pernyataan log dalam kod yang sedang diuji kemudiannya diarahkan kepada pembalak tersuai ini, membolehkan pengambilan semula dan pemeriksaan mesej log. Walau bagaimanapun, pendekatan ini boleh menjadi rumit untuk dilaksanakan dan memerlukan pengubahsuaian kod yang sedang diuji.
Corak Pengumpul Log:
Penyelesaian yang lebih mudah ialah menggunakan penambah tersuai yang merekodkan peristiwa pembalakan dalam koleksi atau senarai. Begini cara anda boleh mencapai ini:
Sampel Pelaksanaan:
Kod sampel berikut menggambarkan corak pengumpul log:
<code class="java">import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.is; public class LogCollectorTest { @Test public void testLogMessage() { // Create a custom appender to collect logging events. final TestAppender appender = new TestAppender(); // Add the appender to the logger we wish to test. final Logger logger = Logger.getLogger(LogCollectorTest.class); logger.addAppender(appender); // Execute code under test. logger.info("Test"); // Retrieve the list of logged events. final List<LoggingEvent> logs = appender.getLog(); // Perform assertions on the first log entry. assertThat(logs.get(0).getLevel(), is(Level.INFO)); assertThat(logs.get(0).getMessage(), is("Test")); } private static class TestAppender extends AppenderSkeleton { private final List<LoggingEvent> log = new ArrayList<>(); @Override public boolean requiresLayout() { return false; } @Override protected void append(LoggingEvent loggingEvent) { log.add(loggingEvent); } @Override public void close() { } public List<LoggingEvent> getLog() { return new ArrayList<>(log); } } }</code>
Kesimpulan:
Corak pengumpul log menyediakan cara yang boleh digunakan semula dan mudah untuk menegaskan pada log mesej dalam ujian JUnit. Dengan menangkap peristiwa yang dilog dalam struktur data, anda boleh mengesahkan kandungan dan formatnya dengan mudah, memastikan ketepatan interaksi kod anda dengan sistem pengelogan.
Atas ialah kandungan terperinci Bagaimana untuk menegaskan pada Mesej Log dalam JUnit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!