You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:14:10