Учитывая следующий компонент Spring:
Код: Выделить всё
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class MyClass {
private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
public void hello() {
// more logic...
LOG.trace("World");
}
}
Код: Выделить всё
import org.junit.Rule;
import org.junit.Test;
import org.springframework.boot.test.rule.OutputCapture;
import static org.hamcrest.Matchers.containsString;
public class MyClassTest {
private final MyClass myClass = new MyClass();
@Rule
public final OutputCapture outputCapture = new OutputCapture();
@Test
public void successShouldLogSuccessMessages() {
myClass.hello();
outputCapture.expect(containsString("World"));
}
}
Я изучил несколько вариантов, ни один из которых не кажется «идеальным», но работает.
- Предоставьте файл конфигурации обратного входа в путь к тестовому классу, который устанавливает уровень журнала для отслеживания хотя бы для этого одного класса. >
- Установите уровень журнала этого класса на TRACE в классе свойств приложения Spring и запустите тест в контексте Spring.
- Создайте настройку и снести тестовый класс, который программно изменяет уровень журнала во время выполнения теста, а затем сбрасывает его после.
Код: Выделить всё
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.profiles.active=test")
@ContextConfiguration(classes = MyClass.class)
public class MyClassTest {
private final MyClass myClass = new MyClass();
@Rule
public final OutputCapture outputCapture = new OutputCapture();
@Test
public void successShouldLogSuccessMessages() {
myClass.hello();
outputCapture.expect(containsString("World"));
}
}
Код: Выделить всё
logging.level.com.example.MyClass=TRACE
Тем не менее, это кажется «странным», я никогда не видел, чтобы кто-то использовал Spring-тесты таким образом (чтобы протестировать один bean-компонент без каких-либо зависимостей и без прямой зависимости от контекст). Тест начал свою жизнь как плановый тест POJO, не заботясь о весне, и он кажется более «чистым», поскольку остается таким.
Существует ли передовая практика, которая применима, когда пытаетесь проверить выходные данные журнала объекта через SLF4J?
Подробнее здесь: https://stackoverflow.com/questions/510 ... ava-spring
Мобильная версия