К log4j в теста JUnit в
у меня есть spring bean, у которого есть член logger, и я использую этот logger для регистрации некоторых действий.
Также я написал тестовый случай, который использует SpringJUnit4ClassRunner
. Я настроил Log4j с файлом свойств, и в каждом тестовом случае я инициализирую регистратор с этими свойствами:
@BeforeClass
public static void init() {
PropertyConfigurator.configure("src/com/config/log4j.properties");
}
когда я запускаю тест, он дает мне предупреждение
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
однако регистратор в моем компоненте записывает сообщения в указанное место в log4j.свойства, т. е. он работает нормально. Почему к log4j дает мне такие предупреждения?
3 ответов
Я думаю, причина в этом коде в SpringJUnit4ClassRunner
public SpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
super(clazz);
if (logger.isDebugEnabled()) {
logger.debug("SpringJUnit4ClassRunner constructor called with [" + clazz + "].");
}
this.testContextManager = createTestContextManager(clazz);
}
Если вы не хотите видеть предупреждение о log4j, просто сделайте так, как @DN предложил просто добавить log4j.файл свойств в путь к классу приложения, если вы используете Maven directory structure add log4j.файл свойств (src/main / resources), который устранит предупреждение.
Я хотел сохранить мою конфигурацию log4j из пути к классам по умолчанию, чтобы использовать другое ведение журнала с модульными тестами и производством. Я работал вокруг этого путем создания подклассов SpringJUnit4ClassRunner и с помощью статического инициализатора класса.
// The new test runner
public class JUnit4ClassRunner extends SpringJUnit4ClassRunner {
static {
try {
Log4jConfigurer.initLogging( "classpath:test/log4jconfig.xml" );
}
catch( FileNotFoundException ex ) {
System.err.println( "Cannot Initialize log4j" );
}
}
public JUnit4ClassRunner( Class<?> clazz ) throws InitializationError {
super( clazz );
}
}
изменение тест:
@RunWith(JUnit4ClassRunner.class)
@ContextConfiguration
@TransactionConfiguration
@Transactional
public class LmpDaoImplTest extends AbstractTransactionalJUnit4SpringContextTests {
...
теперь log4j настроен перед вызовом Spring test runner.