springboot单元测试采坑一: 引入@Runwith,@SpringRun,@SpringbootTest 出错的原因

本文探讨了在公共模块管理测试Jar的不适宜性,详细解释了Maven中测试依赖的scope属性设置为test时,可能导致某些模块无法正确引入测试依赖的问题。并给出了将测试类放置于test目录下的解决方案。

在公共模块里管理测试Jar是不合适的,因为引入时,指定的scope范围是test,在某一模块,引入依赖包时,并不能成功引入测试依赖,下面是实例效果:

1、效果图如下:
在这里插入图片描述
在这里插入图片描述
从此看出,jar已经由maven导入了,但是程序中还是无法找到此类。
这个原因就是pom文件对于测试启动器的配置配成test,如下所示。
在这里插入图片描述

在公共模块里管理测试Jar是不合适的,因为引入时,指定的scope范围是test,在某一模块,引入依赖包时,并不能成功引入测试依赖。把测试类放在test目录对应包下即可。

<think>嗯,用户想了解Spring Boot@RunWith@SpringBootTest和JUnit的@Test注解之间的区别。首先,我需要分别理解这三个注解的功能和用途,然后比较它们的异同。 首先,@Test是JUnit的核心注解,用于标记测试方法。不管是JUnit4还是JUnit5,都需要用@Test来标识测试方法。不过在JUnit5中,虽然还是用@Test,但包路径变了,从org.junit.Test变成了org.junit.jupiter.api.Test。用户可能知道这点,但需要明确区分不同版本的使用。 接下来是@RunWith,这是JUnit4的注解,用于指定测试运行器。在Spring Boot测试中,通常使用SpringRunner.class,这样测试类就能启动Spring上下文。但到了JUnit5,这个注解被@ExtendWith替代,所以用户需要注意他们使用的是哪个版本的JUnit。比如在JUnit5中,用@ExtendWith(SpringExtension.class)来替代原来的@RunWith,而JUnit4则需要保留@RunWith。 然后是@SpringBootTest,这个注解用于创建整个Spring应用的上下文,适合集成测试。它会加载完整的应用配置,并启动嵌入式服务器等。无论JUnit4还是JUnit5都需要这个注解来启用Spring Boot测试支持。不过,在JUnit5中,可以不需要搭配@RunWith或@ExtendWith,因为@SpringBootTest已经自动处理了这些。不过有些情况下可能需要显式使用@ExtendWith,但根据引用内容,JUnit5中可能可以省略。 现在需要比较这三个注解的作用域和搭配使用情况。比如,@Test是方法级的,而@RunWith@SpringBootTest是类级的。在JUnit4中,@SpringBootTest需要配合@RunWith使用,而在JUnit5中不需要。用户可能混淆了这些版本差异,需要明确指出。 用户的问题还涉及到这些注解的区别,所以需要分点说明每个注解的功能、适用场景以及版本差异。同时,引用的资料中提到了JUnit4和JUnit5的不同处理方式,需要将这些信息整合到回答中,确保准确性。 最后,生成相关问题时要围绕这三个注解的可能疑问,比如版本迁移、常见错误、如何选择测试策略等。这样可以帮助用户进步理解相关知识点。</think>### 逐步解答:@RunWith@SpringBootTest与@Test注解的区别 #### 1. **@Test(JUnit 注解)** - **功能**:标记个方法为测试方法,由测试框架执行。 - **用途**:所有单元测试和集成测试的核心入口,仅作用于方法级别。 - **版本差异**: - JUnit 4:`import org.junit.Test;` - JUnit 5:`import org.junit.jupiter.api.Test;`(包路径变化) - **示例**: ```java @Test public void testAddition() { Assert.assertEquals(4, 2 + 2); } ``` #### 2. **@RunWith(JUnit 4 注解)** - **功能**:指定测试运行器(Test Runner),用于扩展测试框架行为[^3]。 - **用途**: - 在 JUnit 4 中,与 Spring 集成时需使用`@RunWith(SpringRunner.class)`,以启动 Spring 上下文[^1]。 - 其他场景:如搭配`MockitoJUnitRunner`进行 Mock 测试。 - **版本差异**: - JUnit 4:必须显式使用。 - JUnit 5:被`@ExtendWith`替代,例如`@ExtendWith(SpringExtension.class)`[^4]。 #### 3. **@SpringBootTestSpring Boot 注解)** - **功能**:创建完整的 Spring 应用上下文,支持集成测试环境[^2]。 - **用途**: - 加载完整的应用配置(如数据库连接、外部服务)。 - 启动嵌入式 Web 服务器(可选)。 - **搭配规则**: - JUnit 4:必须与`@RunWith(SpringRunner.class)`起使用。 - JUnit 5:可单独使用,无需`@ExtendWith`(Spring 自动适配)[^4]。 #### 对比总结 | 注解 | 作用层级 | 适用版本 | 核心功能 | |-------------------|------------|----------|--------------------------------------| | `@Test` | 方法 | JUnit 4/5| 定义测试方法 | | `@RunWith` | 类 | JUnit 4 | 指定测试运行器(如集成 Spring) | | `@SpringBootTest` | 类 | JUnit 4/5| 加载 Spring 上下文,支持集成测试环境 | #### 常见组合示例 - **JUnit 4**: ```java @RunWith(SpringRunner.class) @SpringBootTest public class IntegrationTest { @Test public void testService() { /* ... */ } } ``` - **JUnit 5**: ```java @SpringBootTest public class IntegrationTest { @Test public void testService() { /* ... */ } } ``` --- ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值