测试带有黑色阴影的脂肪罐

发布于 2025-01-20 05:10:20 字数 4502 浏览 3 评论 0原文

我需要在服务器上的CI过程中构建一个JAR进行执行测试。该罐子必须包含所有测试依赖项(例如Junit,Mockito)和Spring Boot依赖性,而我的测试将使用Spring。我写了这样的Maven配置:

        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <id>shade</id>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <finalName>${project.artifactId}-fat</finalName>
                        <minimizeJar>false</minimizeJar>
                        <shadeTestJar>false</shadeTestJar>
                        <artifactSet>
                            <includes>
                                <include>*:*</include>
                            </includes>
                        </artifactSet>
                        <transformers>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>pl.klolo.demo.demo.smoke.SmokeTestAppKt</mainClass>
                                <manifestEntries>
                                    <Multi-Release>true</Multi-Release>
                                </manifestEntries>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Maven构建了一个带有所有依赖性的罐子,但是当我尝试执行测试时,我有奇怪的错误,我无法理解:

2022-04-08 20:45:44.611  INFO 591618 --- [           main] p.k.d.demo.tests.DemoApplicationTests    : No active profile set, falling back to 1 default profile: "default"
2022-04-08 20:45:45.018 ERROR 591618 --- [           main] o.s.boot.SpringApplication               : Application run failed
java.lang.IllegalStateException: Unable to read meta-data for class 
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getAnnotationMetadata(AutoConfigurationSorter.java:237) ~[demo-fat.jar:0.0.1]
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getOrder(AutoConfigurationSorter.java:208) ~[demo-fat.jar:0.0.1]
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.access$000(AutoConfigurationSorter.java:154) ~[demo-fat.jar:0.0.1]
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter.lambda$getInPriorityOrder$0(AutoConfigurationSorter.java:64) ~[demo-fat.jar:0.0.1]
    at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:na]
    at java.base/java.util.TimSort.sort(TimSort.java:220) ~[na:na]
    at java.base/java.util.Arrays.sort(Arrays.java:1515) ~[na:na]
    at java.base/java.util.ArrayList.sort(ArrayList.java:1750) ~[na:na]
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter.getInPriorityOrder(AutoConfigurationSorter.java:62) ~[demo-fat.jar:0.0.1]

您能告诉我什么是错以及如何修复它吗?

smoketeSpapp:

fun main(args: Array<String>) {
    val launcher = LauncherFactory.create()
    val listener = SummaryGeneratingListener()
    launcher.registerTestExecutionListeners(listener)
    launcher.execute(
       LauncherDiscoveryRequestBuilder.request()
          .selectors(selectPackage("pl.klolo"))
          .build()
    )

    printSummary(listener.summary)
    exitProcess(
        if (listener.summary.failures.isEmpty()) 0
        else -1
    )
}

fun printSummary(summary: TestExecutionSummary) {
    println("Passed tests:  ${summary.testsSucceededCount}")

    summary.failures.forEach {
        println("###FAILED TEST ${it.testIdentifier.uniqueId}###")
        it.exception.printStackTrace()
    }
}

DemoApplicationTests:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class DemoApplicationTests(
    @Value("\${test.applicationURI}") val applicationURI: String,
    @Value("\${test.applicationPort}") val applicationPort: Int
) {

init {
    RestAssured.baseURI = applicationURI
    RestAssured.port = applicationPort
}

@Tag("smoke_test")
@Test
fun contextLoads() {
    println("smoke test ===> 1")
}

I need to build one jar for execution tests during CI process on server. This jar have to contains all test dependencies (like junit, mockito) and spring boot dependencies while my test will use spring. I wrote such maven configuration:

        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <id>shade</id>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <finalName>${project.artifactId}-fat</finalName>
                        <minimizeJar>false</minimizeJar>
                        <shadeTestJar>false</shadeTestJar>
                        <artifactSet>
                            <includes>
                                <include>*:*</include>
                            </includes>
                        </artifactSet>
                        <transformers>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>pl.klolo.demo.demo.smoke.SmokeTestAppKt</mainClass>
                                <manifestEntries>
                                    <Multi-Release>true</Multi-Release>
                                </manifestEntries>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Maven built one jar with all dependencies, but when I try to execute test I have strange error which I cannot understand:

2022-04-08 20:45:44.611  INFO 591618 --- [           main] p.k.d.demo.tests.DemoApplicationTests    : No active profile set, falling back to 1 default profile: "default"
2022-04-08 20:45:45.018 ERROR 591618 --- [           main] o.s.boot.SpringApplication               : Application run failed
java.lang.IllegalStateException: Unable to read meta-data for class 
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getAnnotationMetadata(AutoConfigurationSorter.java:237) ~[demo-fat.jar:0.0.1]
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getOrder(AutoConfigurationSorter.java:208) ~[demo-fat.jar:0.0.1]
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.access$000(AutoConfigurationSorter.java:154) ~[demo-fat.jar:0.0.1]
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter.lambda$getInPriorityOrder$0(AutoConfigurationSorter.java:64) ~[demo-fat.jar:0.0.1]
    at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:na]
    at java.base/java.util.TimSort.sort(TimSort.java:220) ~[na:na]
    at java.base/java.util.Arrays.sort(Arrays.java:1515) ~[na:na]
    at java.base/java.util.ArrayList.sort(ArrayList.java:1750) ~[na:na]
    at org.springframework.boot.autoconfigure.AutoConfigurationSorter.getInPriorityOrder(AutoConfigurationSorter.java:62) ~[demo-fat.jar:0.0.1]

Could you tell me what is wrong and how to fix it?

SmokeTestApp:

fun main(args: Array<String>) {
    val launcher = LauncherFactory.create()
    val listener = SummaryGeneratingListener()
    launcher.registerTestExecutionListeners(listener)
    launcher.execute(
       LauncherDiscoveryRequestBuilder.request()
          .selectors(selectPackage("pl.klolo"))
          .build()
    )

    printSummary(listener.summary)
    exitProcess(
        if (listener.summary.failures.isEmpty()) 0
        else -1
    )
}

fun printSummary(summary: TestExecutionSummary) {
    println("Passed tests:  ${summary.testsSucceededCount}")

    summary.failures.forEach {
        println("###FAILED TEST ${it.testIdentifier.uniqueId}###")
        it.exception.printStackTrace()
    }
}

DemoApplicationTests:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class DemoApplicationTests(
    @Value("\${test.applicationURI}") val applicationURI: String,
    @Value("\${test.applicationPort}") val applicationPort: Int
) {

init {
    RestAssured.baseURI = applicationURI
    RestAssured.port = applicationPort
}

@Tag("smoke_test")
@Test
fun contextLoads() {
    println("smoke test ===> 1")
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萝莉病 2025-01-27 05:10:21

我找到了问题的原因。这是带有条目的文件 spring.factories:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=

当我删除文件 jar 时可以正常工作

I found reason of my problem. It was file spring.factories with entry:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=

When I removed file jar works correctly

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文