将@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上找到某些内容-但是我只发现了诸如“尝试”,“尝试”之类的建议,但对理解没有帮助。 因此,我们将不胜感激。
答案 0 :(得分:0)
定义您的SpringBoot Main类,如下所示
@SpringBootTest(classes = {StartSamples.class})
public class SimpleTest {
...
}