Jak ustawić zmienną środowiskową dla springbootstest do konfiguracji logowania?
błąd konfiguracji logowania występuje przy użyciu zmiennej środowiskowej w Logback.xml.

W Logback.xml,

<appender name="plainLogsToFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/${LOG_PATH}/service.log</file>

To jest klasa testowa:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MyTestClass {
//tests here
}

Zgłoszono następujące wyjątek:

openFile(/LOG_PATH_IS_UNDEFINED/service.log,true) call failed. java.io.FileNotFoundException: /LOG_PATH_IS_UNDEFINED/service.log (No such file or directory)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:162)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.reinitialize(LogbackLoggingSystem.java:208)
    at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:74)
    at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:59)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:115)
    at org.springframework.boot.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:303)
    at org.springframework.boot.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:276)
    at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:239)
    at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:212)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)

Użyłem sposobów, aby ustawić wartości właściwości wyraźnie przy użyciu @testpropertySource , @activeProfiles ("Test") , @springbetestest (..., właściwości = {}) .
Logback tylko odnosi się do zmiennych środowiska systemowego.
Cieszę się tylko o egzekucji testowej.
jakiś sposób na zignorowanie logowania również docenione.

0
cyrilantony 26 lipiec 2020, 09:22

1 odpowiedź

Najlepsza odpowiedź

Za pomocą bloku kodu @Before @BeforeAll

Możesz rozwiązać to za pomocą niestandardowego rozszerzenia Junit 5:

public class PropertyExtension implements BeforeAllCallback {

  @Override
  public void beforeAll(ExtensionContext context) {
    System.out.println("Setting system property");
    System.setProperty("LOG_PATH", "/my/logpath/for/testing");
  }

}

I użyj go w swoim teście jak:

@ExtendWith(PropertyExtension.class)
@SpringBootTest(classes = Application.class)
public class MyTestClass {

}

Możesz osiągnąć to samo z Junit 4 z niestandardową ClassRule. Czytaj więcej na temat tego Oto.

Ponadto można również ustawić domyślnie dla takich zmiennych:

<appender name="plainLogsToFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/${LOG_PATH:-/tmp/default}/service.log</file>
</appender>
1
rieckpil 29 lipiec 2020, 04:41