Jeden z moich modułów Maven ignoruje moje poziomy logowania podczas uruchamiania testów.
W src/test/resources
mam application.properties
:
app.name=bbsng-import-backend
app.description=Import Backend Module for Application
spring.profiles.active=test
# LOGGING
logging.level.root=error
logging.level.org.springframework.core =fatal
logging.level.org.springframework.beans=fatal
logging.level.org.springframework.context=fatal
logging.level.org.springframework.transaction=error
logging.level.org.springframework.test=error
logging.level.org.springframework.web=error
logging.level.org.hibernate=ERROR
Ja też próbowałem application-test.properties
.
Moja aplikacja dużo rejestruje, szczególnie podczas ładowania kontekstu. Próbowałem logback.xml
, logback-test.xml
a logback-spring.xml
jednak nic nie pomaga.
Mój pom:
<parent>
<groupId>at.company.bbsng</groupId>
<artifactId>bbsng-import</artifactId>
<version>0.1.0-SNAPSHOT</version>
</parent>
<artifactId>bbsng-import-backend</artifactId>
<name>bbsng-import-backend</name>
<properties>
<start-class>at.company.bbsng.dataimport.ApplicationImportBackend</start-class>
</properties>
<dependencies>
<!-- APPLICATION ... -->
<dependency>
<groupId>at.company.bbsng</groupId>
<artifactId>bbsng-app-domain</artifactId>
<scope>test</scope>
</dependency>
<!-- SPRING ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<scope>test</scope>
</dependency>
<!-- JAVAX ... -->
...
<!-- COMMONS ... -->
...
<!-- LOMBOK ... -->
...
<!-- DB -->
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${org.springframework.boot-version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Jedna prosta klasa testowa:
@ContextConfiguration(classes = { ApplicationImportBackend.class })
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
@Autowired
private JobLauncher jobLauncher;
@Test
public void testSimpleProperties() throws Exception {
assertNotNull(jobLauncher);
}
}
Dzienniki aplikacji są w trybie DEBUG.
I tak, application.properties
zostanie załadowany. Próbowałem już zepsuć aplikację przez złą konfigurację.
Dziękuję za wszelkie podpowiedzi.
źródło
application.properties
jest analizowane później niż inicjalizacja testu. Dlategoorg.springframework.test
nie ma wpływu na początkowe logowanie testu.<logger name="org.springframework.boot" level="warn" />
i<logger name="org.eclipse.jetty" level="warn" />
naprawdę zminimalizowałem hałas. Jeśli używasz swaggera, możesz również dodać<logger name="springfox" level="warn" />
. Dobra robota. Miej nagrodę!logback-test.xml
pliku. Aby je wyłączyć , podążyłem za główną odpowiedzią z tego postu StackOverflow - i BAM, udało mi się pozbyć całego wstępnego rejestrowania podczas uruchamiania testów.logback-test.xml
działa zgodnie z oczekiwaniami. (+1) dzięki<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <logger name="org.springframework" level="INFO"/> </configuration>
Jako szybką poprawkę umieściłem
logback.xml
plik z powyższą zawartościąsrc/test/resources
i działa.źródło
logback-text.xml
Aby włączyć,
application.properties
trzeba dodać adnotację@SpringBootTest
do testowania zajęć, przeczytaj więcej tutaj .źródło
Szukam też rozwiązania tego problemu, tymczasem korzystam z następującego rozwiązania:
to nie jest najlepsze, ale działa
@BeforeClass public static void setErrorLogging() { LoggingSystem.get(ClassLoader.getSystemClassLoader()).setLogLevel(Logger.ROOT_LOGGER_NAME, LogLevel.ERROR); }
LoggingSystem
: powszechna abstrakcja dotycząca systemów logowania.->
get
: Wykryj i zwróć używany system logowania. Obsługuje Logback i Java LoggingsetLogLevel
: Ustawia poziom rejestrowania dla danego rejestratora.Pamiętaj, aby zmienić poziom dziennika wstecz dla wszystkich innych klas testowych.
Mam nadzieję, że ci to pomoże, powodzenia
źródło
Jeśli twoje testy są opatrzone adnotacjami
@DataJpaTest
, możesz wyłączyć wylogowanie z Hibernate SQL za pomocą:@DataJpaTest(showSql=false) public class MyTest { .. }
źródło
Spróbuj tego:
@ContextConfiguration(classes = ApplicationImportBackend.class, initializers = ConfigFileApplicationContextInitializer.class) @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles({ "test" }) public class BatchJobConfigurationTests { //... }
źródło