重命名持有@SpringBootApplication批注的类的包时,SpringBoot Junit5失败

问题描述 投票:0回答:1

当将@SpringBootApplication移到另一个包时,我在JUnit 5中苦苦挣扎。

我已经使用Maven和Eclipse设置了一个新的SpringBoot项目(2.2.1.RELEASE)(必须将其从“ Eclipse Photon”升级为支持SpringBoot-Release)>

我的包裹布局看起来像这样:

/src/main/java
   com.package.sample.appl1
     StartSamples.java
   com.package.sample.appl1.start
   com.package.sample.appl1.dbaccess
   com.package.sample.appl1.run
   com.package.sample.appl1.utils
   com.package.sample.appl2.run
   com.package.sample.appl2.run

/src/test/java
   com.package.sample.appl1.dbaccess
     SimpleTest.java

持有@SpringBootApplication的类是:

@ComponentScan({
    "com.package.sample"
    })
@SpringBootApplication
public class StartSamples {
   public static void main(String[] args) {
        System.out.println("Start");
        try {
            SpringApplication.run(StartSamples.class, args);
        } catch (Exception e) {
            LOGGER.error("", e);
            System.exit(-1);
        }
    }

测试是这样:

import static org.junit.Assert.assertEquals;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.junit.jupiter.SpringExtension;

/**
 * Test the Query-statements and the DAO methods
 * 
 * @author U005078
 *
 */
@SpringBootTest
@ExtendWith(SpringExtension.class)
@ComponentScan({
    "com.package.sample"})
@EnableAutoConfiguration
public class SimpleTest {

    @SuppressWarnings("unused")
    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleTest.class);

    @Test
    @DisplayName("SimpleTest")
    public void testTotalRows() {

使用此配置,一切都很好,“ StartSamples”可以正常工作,并且可以通过SimpleTest进行。

但是将“ StartSamples”移动到另一个包(例如“ com.package.sample.start”时,对我来说更有意义-“ StartSamples”仍然可以,但是“ SimpleTest”不会失败也不会成功-测试似乎无法被执行。我看到一条消息:类路径资源[com / package / sapmle / appl1 / dbaccess / SimpleTest-context.xml]不存在类路径资源[com / package / sapmle / appl1 / dbaccess / SimpleTestContext.groovy]不存在。[SimpleTest]:SimpleTest不会声明任何以@Configuration注释的静态,非私有,非最终,嵌套类。

我还发现:使用SpringBootContextLoader未为测试类[com.package.sample.appl1.dbaccess.SimpleTest]找到@ContextConfiguration或@ContextHierarchy。

所以我将@ContextConfiguration定义为“ SimpleTest”,然后它起作用了。但是我一点也不明白为什么@SpringBootApplication的移动确实会改变这种行为。

[再次尝试设置该项目,我最终遇到了“找不到测试运行器'JUnit 5'的测试”,并且也找不到任何原因。我从当前的方法重新开始,然后转到此处。并不要提供任何提示给我错误的线索-对于任何一个问题。

任何解释都将不胜感激。我已经尝试了很多小时才能在Internet上找到某些内容-但是我只发现了诸如“尝试”,“尝试”之类的建议,但对理解没有帮助。因此,任何帮助表示赞赏。

当将@SpringBootApplication移到另一个包时,我在JUnit 5中苦苦挣扎。我已经用Maven和Eclipse设置了一个新的SpringBoot项目(2.2.1.RELEASE)(必须从“ ...

如下定义您的SpringBoot主类

@SpringBootTest(classes = {StartSamples.class})
public class SimpleTest {
   ...
}
spring spring-boot junit junit-jupiter
1个回答
0
投票

如下定义您的SpringBoot主类

© www.soinside.com 2019 - 2024. All rights reserved.