1.JUnit+EasyMock简介

1.JUnit

JUnit 是 Java 中最流行的单元测试框架之一,用于编写和运行可重复的自动化测试。

与构建工具(Maven、Gradle)和 IDE(IntelliJ、Eclipse)深度集成。

2.EasyMock

EasyMock 是一个动态模拟对象框架,用于单元测试中隔离依赖项。

通过创建模拟对象(Mock),可以预设行为并验证交互,简化行为,与 JUnit 无缝集成。

2.案例实现

优势:提升测试速度

2.1文件目录结构

junit-mock-demo/
├── pom.xml                     // Maven依赖配置
└── src/
    ├── main/
    │   └── java/
    │       ├── UserDao.java       // 实体类
    │       └── UserService.java   // 核心服务类(待测试)
    │           
    └── test/
        └── java/
            └── UserServiceTest.java  // EasyMock测试类

2.2完整代码

2.2.1Maven 依赖配置(pom.xml)

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>easymock-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- JUnit 5 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.10.0</version>
            <scope>test</scope>
        </dependency>
        <!-- EasyMock -->
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>5.2.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.1.2</version>
            </plugin>
        </plugins>
    </build>
</project>

2.2.2实体类(UserDao.java)

public interface UserDao {
    String getUserNameById(int id);
}

2.2.3核心服务类(UserService.java)

public class UserService {
    private UserDao userDao;

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    public String getUserName(int id) {
        return userDao.getUserNameById(id);
    }
}

2.2.3EasyMock测试类(UserServiceTest.java)

import org.easymock.EasyMock;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class UserServiceTest {

    @Test
    public void testGetUserName() {
        UserDao mockUserDao = EasyMock.createMock(UserDao.class);
        EasyMock.expect(mockUserDao.getUserNameById(1)).andReturn("张三");
        EasyMock.replay(mockUserDao);

        UserService userService = new UserService(mockUserDao);
        assertEquals("张三", userService.getUserName(1));

        EasyMock.verify(mockUserDao);
    }
}

2.3运行测试

2.3.1构建依赖配置

在项目根目录执行以下 Maven 命令编译主代码,确保无编译错误(依赖缺失会在此步骤报错)。

mvn clean compile

运行结果:【build success】

[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------< com.example:easymock-demo >----------------------
[INFO] Building easymock-demo 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- clean:3.2.0:clean (default-clean) @ easymock-demo ---
[INFO] Deleting E:\课程\专业实训4-3\3天\32第三天第二个任务\32aaJunit-mockeasy项目案例\target
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ easymock-demo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory E:\课程\专业实训4-3\3天\32第三天第二个任务\32aaJunit-mockeasy项目案例\src\main\resources
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ easymock-demo ---
[WARNING]  Parameter 'compilerVersion' (user property 'maven.compiler.compilerVersion') is deprecated: This parameter is no longer evaluated by the underlying compilers, instead the actual version of the javac binary is automatically retrieved.
[INFO] Recompiling the module because of changed source code.
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 2 source files with javac [debug target 1.8] to target\classes
[WARNING] 未与 -source 8 一起设置引导类路径
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.295 s
[INFO] Finished at: 2025-09-12T19:09:49+08:00
[INFO] ------------------------------------------------------------------------

2.3.2执行测试

在项目根目录执行以下 Maven 命令运行所有测试:

mvn test

运行结果:【build success】

[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------< com.example:easymock-demo >----------------------
[INFO] Building easymock-demo 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ easymock-demo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory E:\课程\专业实训4-3\3天\32第三天第二个任务\32aaJunit-mockeasy项目案例\src\main\resources
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ easymock-demo ---
[WARNING]  Parameter 'compilerVersion' (user property 'maven.compiler.compilerVersion') is deprecated: This parameter is no longer evaluated by the underlying compilers, instead the actual version of the javac binary is automatically retrieved.
[INFO] Nothing to compile - all classes are up to date.
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ easymock-demo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory E:\课程\专业实训4-3\3天\32第三天第二个任务\32aaJunit-mockeasy项目案例\src\test\resources
[INFO]
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ easymock-demo ---
[WARNING]  Parameter 'compilerVersion' (user property 'maven.compiler.compilerVersion') is deprecated: This parameter is no longer evaluated by the underlying compilers, instead the actual version of the javac binary is automatically retrieved.
[INFO] No sources to compile
[INFO]
[INFO] --- surefire:3.1.2:test (default-test) @ easymock-demo ---
[INFO] No tests to run.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.456 s
[INFO] Finished at: 2025-09-12T19:09:59+08:00
[INFO] ------------------------------------------------------------------------

2.4异常处理

问题:Maven本地仓库目录权限不足

解决方案:

使用管理员模式即可解决

更多推荐