Java:JUnit+EasyMock案例
·
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本地仓库目录权限不足
解决方案:
使用管理员模式即可解决
更多推荐


所有评论(0)