Spring 启动单元测试执行 main class

Spring Boot unit test executing the main class

当我 运行 对 spring 启动应用程序进行单元测试时,我发现尝试执行 Main class 的奇怪行为。这背后是否有原因或有什么方法可以阻止这种情况发生。

我的主要class

@SpringBootApplication
public class SampleMain  implements CommandLineRunner {
    
    private static final Logger logger = LogManager.getLogger(SampleMain.class);

    public static void main(String[] args) {
        System.out.println("test");
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info("running main..");      
    }

}

单元测试

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
class SampleTest {

    @Test
    void test() {
        assertTrue(true);
    }

}


当我运行进行单元测试时,它也会执行我的 Main class (SampleMain)

INFO 13912 --- [main] org.dec.image.SampleTest:在桌面上使用 Java 17.0.1 启动 SampleTest,PID 为 13912(由 C:\java\git\image-duplicates 中的 boomr 启动)

INFO 13912 --- [main] org.dec.image.SampleTest:未设置活动配置文件,回退到 1 个默认配置文件:“default”

INFO 13912 --- [main] org.dec.image.SampleTest:在 0.671 秒内启动了 SampleTest(JVM 运行ning for 1.703)

INFO 13912 --- [main] org.dec.image.SampleMain : 运行ning main..

背后的原因是什么,无论如何要阻止它?

编辑:我指出的是框架代码,它实际上是 运行 主要 class 每次我 运行 单元测试,这有点烦人 class 有时相当 运行.

我自己 运行 参与其中。它是 counter-intuitive 的 Spring 工作方式。我通过将我的测试应用程序放在具有主应用程序的包之外的包中解决了这个问题。

因此,如果您的主要应用程序是 my.app.SampleMain,请尝试将您的测试 class 放入 my.test.SampleTest。