web-dev-qa-db-ja.com

Spring Boot Testはlogging.levelを無視します

テストの実行時に、Mavenモジュールの1つがログレベルを無視します。

Src/test/resourcesには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

Application-test.propertiesも試しました。

私のアプリケーションは、特にコンテキストをロードするときに多くのログを記録します。 logback.xml、logback-test.xml、logback-spring.xmlを試しましたが、何も役に立ちません。

私のポン:

<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>

1つの簡単なテストクラス:

@ContextConfiguration(classes = { ApplicationImportBackend.class })
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {

    @Autowired
    private JobLauncher jobLauncher;

    @Test
    public void testSimpleProperties() throws Exception {
        assertNotNull(jobLauncher);
    }

}

アプリケーションログはデバッグモードです。

はい、application.propertiesがロードされます。私はすでに間違った設定でアプリケーションを壊そうとしました。

ヒントをありがとう。

73
Michael Hegner

さて、次のように構成したすべてのモジュールで、私が今やったことです:

src/main/resources:
logging.level。*のようなapplication.properiesで、問題の記述どおりにロギング構成を使用します。

src/test/resources:
logback-test.xmlを次のように使用します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="*.myapp" level="error" />
    <logger name="org.springframework.core " level="error" />
    <logger name="org.springframework.beans" level="error" />
    <logger name="org.springframework.context" level="error" />
    <logger name="org.springframework.transaction" level="error" />
    <logger name="org.springframework.web" level="error" />
    <logger name="org.springframework.test" level="error" />
    <logger name="org.hibernate" level="error" />
</configuration>

しかし、なぜいくつかのモジュールでapplication.propertiesを使用できるのか、まだ理解していませんが、別のモジュールでは無視されます...

しかし、おそらく背景知識を備えたいくつかのヒントはまだ歓迎されています。

私は答えを解決策としてマークしません、それはまだ回避策のように感じます。

69
Michael Hegner

Application.propertiesを有効にするには、アノテーション@SpringBootTestをテストクラスに追加する必要があります。続きを読む here

21
ksandr
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="org.springframework" level="INFO"/>
</configuration>

迅速な修正として、上記のコンテンツを含むlogback.xmlファイルをsrc/test/resourcesに配置し、動作します。

20
dnocode

テストに@ DataJpaTestの注釈が付けられている場合、次の方法でHibernate SQLログオフを切り替えることができます。

@DataJpaTest(showSql=false)
public class MyTest {
  ..
}

私はそれに対する解決策も探していますが、次の解決策を使用しています:

これは最高ではありませんが、動作します

@BeforeClass
public static void setErrorLogging() {
   LoggingSystem.get(ClassLoader.getSystemClassLoader()).setLogLevel(Logger.ROOT_LOGGER_NAME, LogLevel.ERROR);
}

LoggingSystem:ロギングシステムの一般的な抽象化。

->

get:使用中のロギングシステムを検出して返します。ログバックとJavaロギングをサポート

setLogLevel:指定されたロガーのログレベルを設定します。

他のすべてのテストクラスのログレベルを変更してください。

お役に立てば幸いです

6
Idan

これを試して:

@ContextConfiguration(classes = ApplicationImportBackend.class, 
    initializers = ConfigFileApplicationContextInitializer.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
    //...
}
2
luboskrnac