使用JUnit和Mockito做单元测试时出现Maven编译错误求助
解决JUnit/Mockito单元测试的编译错误问题
你遇到的Maven构建失败、找不到类和注解的问题,主要是缺少必要的导入语句和依赖配置冗余/版本不一致导致的,下面一步步帮你解决:
一、先补全测试类的缺失导入
你的测试类里用到了View、MockMvc、@Before、@Test这些,但都没加对应的import,而且要注意:你pom里配置的是JUnit 5(Jupiter),但@Before是JUnit 4的注解,JUnit 5里对应的是@BeforeEach。
修改后的测试类代码,补全所有必要导入:
import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.web.servlet.View; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.service.api.LinuxController; import com.service.services.LinuxCommandService; public class LinuxControllerTest { @InjectMocks LinuxController controller; @Mock LinuxCommandService linuxCommandService; @Mock View mockView; MockMvc mockMvc; @BeforeEach public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mockMvc = MockMvcBuilders.standaloneSetup(controller) .setSingleView(mockView) .build(); } @Test public void testRunCommand() throws Exception { mockMvc.perform(post("/api/linux/command")) .andExpect(status().isOk()); // .andExpect(view().name("redirect:/customer/list")); } }
二、优化pom.xml的依赖配置
你的pom里重复添加了JUnit Jupiter和Mockito的依赖,而spring-boot-starter-test已经包含了这些组件(并且版本和Spring Boot保持一致,能避免版本冲突),建议移除冗余的依赖:
需要移除的依赖项:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.21.0</version> <scope>test</scope> </dependency>
保留spring-boot-starter-test即可:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <!-- 如果需要排除JUnit 4相关组件,可以加以下配置,Spring Boot 2.x默认已用JUnit 5 --> <!-- <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> --> </dependency>
三、最后执行Maven命令重新构建
先清理之前的构建缓存,再重新编译测试:
mvn clean test-compile
这样应该就能解决编译错误,让Maven构建通过了。
内容的提问来源于stack exchange,提问作者SwimJim
相关产品推荐
相关产品推荐

