论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
透彻明白并办理Mockito模拟框架的单位测试无法运行的题 ...
透彻明白并办理Mockito模拟框架的单位测试无法运行的题目 ...
飞不高
金牌会员
|
2024-12-9 02:43:30
|
显示全部楼层
|
阅读模式
楼主
主题
868
|
帖子
868
|
积分
2604
本篇的实例基于Maven
IDE (VS Code) 运行
在VS Code 运行的时候, 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮,单击就可以运行利用Mockito 注解 @ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。
不利用注解:
**
* Copyright (C) Oscar Chen(XM):
*
* Date: 2024-12-07
* Author: XM
*/
package com.osxm.test.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.jupiter.api.Test;
public class MockMethodTest {
@Test
public void objectMock() {
List<String> mockedList = mock(List.class); // 创建一个List接口的mock对象
when(mockedList.get(0)).thenReturn("first");
mockedList.get(0);
verify(mockedList).get(0);
}
}
复制代码
利用注解
//**
* Copyright (C) Oscar Chen(XM):
*
* Date: 2024-12-01
* Author: XM
*/
package com.osxm.test.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class MockitoUsageTest {
@Mock
private List<String> mockedList;
@Test
public void objectMock() {
when(mockedList.get(0)).thenReturn("first");
mockedList.get(0);
verify(mockedList).get(0);
}
}
复制代码
如果需要调试模式可以右键单击按钮,在弹出菜单选择Debug Test
mvn test 命令行运行的题目
但是在命令行利用 mvn test 命令运行的时候, 却出现了比较奇怪的现象:
普通的JUnit 测试类和方法能正常运行
利用Mockito 的测试类能找到,但是测试方法找不到,如下图所示:
为什么呢? 这里起主要介绍一下 Maven的插件 maven-surefire-plugin。
maven-surefire-plugin
maven-surefire-plugin是Maven的一个插件,紧张用于执行Java应用步调中的单位测试。
紧张功能包罗:
执行单位测试
:maven-surefire-plugin可以自动发现并执行项目中的测试类。它默认利用JUnit来执行测试,但也可以设置为支持其他测试框架,如TestNG。
陈诉天生
:该插件提供具体的测试效果陈诉,包罗测试用例的数量、成功/失败/忽略的数量等,这些陈诉通常以纯文本(
.txt)和XML(
.xml)格式天生,并保存在项目的target/surefire-reports目录下。
定制测试执行
:maven-surefire-plugin允许用户通过设置来定制测试的执行方式,例如指定特定的测试类或方法进行执行,或者清除某些测试类或方法。
mvn test 运行Mockito 测试的解法
在pom.xml 中添加maven-surefire-plugin 插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.2</version>
</plugin>
</plugins>
</build>
复制代码
再次运行就可以找到Mockito 编写的测试类了。
题目
那么,题目来了:
为什么VS Code不添加maven-surefire-plugin可以运行单位测试?
为什么在不添加maven-surefire-plugin的状况下,普通的单位测试可以找到并运行,Mockito 的不行了呢?
接下来就解惑这两个题目
### 为什么VS Code不添加maven-surefire-plugin可以运行单位测试?
在IDE中导入Maven项目时,IDE通常会自动读取pom.xml文件,并根据此中的设置来设置项目的构建和测试环境。如果pom.xml中没有显式设置maven-surefire-plugin,IDE可能会利用Maven的默认行为来执行测试。
别的, IDE通常还提供了测试运行器功能,允许用户直接运行和调试测试类。这些测试运行器可以与Maven的测试框架集成,从而在不依赖maven-surefire-plugin的环境下执行测试。
所以,对于IDE ,可以不依赖pom.xml 的maven-surefire-plugin 就可以运行测试
为什么在不添加maven-surefire-plugin的状况下,普通的单位测试可以找到并运行,Mockito 的不行了呢?
轻微细心一点就可以看到在显式添加maven-surefire-plugin 的前后的差异:
在pom.xml 显式添加maven-surefire-plugin 之前,利用mvn test 命令着实也利用了maven-surefire-plugin,只是版本比较低 ,是2.12.4 版。
这个原意就是 Maven内置了一个版本的maven-surefire-plugin,纵然项目没有设置,也可以利用这个版原来运行单位测试,但是这里的状况,这个版本相对于Mockito 的版原来说,低了, 所以找不到Mockito 的测试。通过添加新版本的
maven-surefire-plugin 就可以办理这个题目。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
飞不高
金牌会员
这个人很懒什么都没写!
楼主热帖
Java集合的lastlastIndexOfSubList()方 ...
WPF开发经验-实现自带触控键盘的TextBo ...
如何在 K8S 集群范围使用 imagePullSec ...
微信小程序集合3(百度小说+电商+仿哗 ...
mysql总结
AnimateDiff论文解读-基于Stable Diffu ...
【关系型数据库】事务特性及事务隔离级 ...
Python批量采集百度资讯文章,如何自定 ...
自从用了 EasyExcel,导入导出 Excel ...
Doris(三) -- 索引
标签云
挺好的
服务器
快速回复
返回顶部
返回列表