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

时间:2019-11-16 10:54:09

标签: spring spring-boot junit junit-jupiter

将@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上找到某些内容-但是我只发现了诸如“尝试”,“尝试”之类的建议,但对理解没有帮助。 因此,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

定义您的SpringBoot Main类,如下所示

@SpringBootTest(classes = {StartSamples.class})
public class SimpleTest {
   ...
}