Rumah  >  Artikel  >  Java  >  Bagaimana untuk menegaskan pada Mesej Log dalam JUnit?

Bagaimana untuk menegaskan pada Mesej Log dalam JUnit?

DDD
DDDasal
2024-10-30 07:38:02753semak imbas

How to Assert on a Log Message in JUnit?

Cara Menegaskan pada Mesej Log dalam JUnit

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:

  1. Buat Lampiran:
    Laksanakan subkelas Appender tersuai, mengatasi kaedah append() untuk menyimpan peristiwa pengelogan dalam struktur data ( cth., senarai).
  2. Tambahkan Penambah pada Pembalak:
    Tambahkan contoh penambah tersuai anda pada pembalak yang dikehendaki. Langkah ini boleh dilakukan dalam kaedah ujian atau menggunakan anotasi seperti @Sebelum dan @Selepas.
  3. Penegasan Mesej Log:
    Selepas melaksanakan kod yang sedang diuji, dapatkan semula senarai yang dilog acara daripada lampiran anda. Anda kemudiannya boleh menggunakan kaedah penegasan JUnit untuk mengesahkan tahap, mesej dan atribut lain bagi entri log, seperti yang ditunjukkan dalam coretan kod yang disediakan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn