Конфигурирование с помощью BasicConfigurator.configure();
устанавливает базовый консольный appender, установленный при отладкеПроект с настройкой выше и без другого кода (кроме теста) должен производить три строки регистрации в консоли.Я не могу сказать ничего, кроме «это работает для меня».
Вы пытались создать пустой проект только с log4j и junit, используя только приведенный выше код, и запустили его?
Кроме того, вЧтобы запустить метод @Before
:
@Test
public void testname() throws Exception {
assertTrue(true);
}
РЕДАКТИРОВАТЬ:
Если вы запустите более одного теста за раз, каждый из них вызовет init перед запуском.
В этом случае, если у вас было два теста, первый имел бы один регистратор, а второй тест снова вызвал бы init, дважды делая журнал (попробуйте) - вы должны получить 9 строк регистрации в консоли с двумя тестами.
Возможно, вы захотите использовать статический метод init с аннотацией @BeforeClass
, чтобы избежать этого.Хотя это также происходит в разных файлах, возможно, вы захотите взглянуть на документацию по TestSuites в JUnit 4. И / или вызвать BasicConfigurator.resetConfiguration();
в аннотированном классе @AfterClass, чтобы удалить все регистраторы после каждого класса тестирования / набора тестов.
Кроме того, корневой регистратор используется повторно, поэтому, если вы установите уровень корневого регистратора в методе тестирования, который запускается раньше, он сохранит этот параметр для всех других тестов, которые будут выполнены позже, даже если они находятся в разных файлах.,(не произойдет при сбросе конфигурации).
Testcase - это приведет к 9 строкам регистрации:
import static org.junit.Assert.assertTrue;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
public class SampleTest
{
private static final Logger LOGGER = Logger.getLogger(SampleTest.class);
@Before
public void init() throws Exception
{
// Log4J junit configuration.
BasicConfigurator.configure();
}
@Test
public void testOne() throws Exception {
LOGGER.info("INFO TEST");
LOGGER.debug("DEBUG TEST");
LOGGER.error("ERROR TEST");
assertTrue(true);
}
@Test
public void testTwo() throws Exception {
LOGGER.info("INFO TEST");
LOGGER.debug("DEBUG TEST");
LOGGER.error("ERROR TEST");
assertTrue(true);
}
}
Изменение метода init сводится к исключенным шести строкам:
@BeforeClass
public static void init() throws Exception
{
// Log4J junit configuration.
BasicConfigurator.configure();
}
Ваша проблема, вероятно, вызвана другим классом тестов или набором тестов, где уровень ведения журнала корневого регистратора установлен на ERROR, а не сбрасывается.
Вы также можете проверить это путем сброса в@BeforeClass, перед настройкой регистрации.
Имейте в виду, что эти изменения могут нарушить ожидаемое ведение журнала для других тестовых случаев, пока оно не будет зафиксировано во всех местах.Я предлагаю попробовать, как это работает в отдельной рабочей области / проекте, чтобы понять, как это работает.