ToB企服应用市场:ToB评测及商务社交产业平台

标题: 透彻明白并办理Mockito模拟框架的单位测试无法运行的题目 [打印本页]

作者: 飞不高    时间: 2024-12-9 02:43
标题: 透彻明白并办理Mockito模拟框架的单位测试无法运行的题目
本篇的实例基于Maven
IDE (VS Code) 运行

在VS Code 运行的时候, 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮,单击就可以运行利用Mockito 注解 @ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。


  1. **
  2. * Copyright (C)  Oscar Chen(XM):
  3. *
  4. * Date: 2024-12-07
  5. * Author: XM
  6. */
  7. package com.osxm.test.mock;
  8. import static org.mockito.Mockito.mock;
  9. import static org.mockito.Mockito.verify;
  10. import static org.mockito.Mockito.when;
  11. import java.util.List;
  12. import org.junit.jupiter.api.Test;
  13. public class MockMethodTest {
  14.    
  15.     @Test
  16.     public void objectMock() {
  17.         List<String> mockedList = mock(List.class); // 创建一个List接口的mock对象
  18.         when(mockedList.get(0)).thenReturn("first");
  19.         mockedList.get(0);
  20.         verify(mockedList).get(0);
  21.     }
  22. }
复制代码

  1. //**
  2. * Copyright (C)  Oscar Chen(XM):
  3. *
  4. * Date: 2024-12-01
  5. * Author: XM
  6. */
  7. package com.osxm.test.mock;
  8. import static org.mockito.Mockito.verify;
  9. import static org.mockito.Mockito.when;
  10. import java.util.List;
  11. import org.junit.jupiter.api.Test;
  12. import org.junit.jupiter.api.extension.ExtendWith;
  13. import org.mockito.Mock;
  14. import org.mockito.junit.jupiter.MockitoExtension;
  15. @ExtendWith(MockitoExtension.class)
  16. public class MockitoUsageTest {
  17.     @Mock
  18.     private List<String> mockedList;
  19.     @Test
  20.     public void objectMock() {
  21.         when(mockedList.get(0)).thenReturn("first");
  22.         mockedList.get(0);
  23.         verify(mockedList).get(0);
  24.     }
  25. }
复制代码
如果需要调试模式可以右键单击按钮,在弹出菜单选择Debug Test

mvn test 命令行运行的题目

但是在命令行利用 mvn test 命令运行的时候, 却出现了比较奇怪的现象:


为什么呢? 这里起主要介绍一下 Maven的插件 maven-surefire-plugin。
maven-surefire-plugin

maven-surefire-plugin是Maven的一个插件,紧张用于执行Java应用步调中的单位测试。
紧张功能包罗:
mvn test 运行Mockito 测试的解法

在pom.xml 中添加maven-surefire-plugin 插件:
  1.     <build>
  2.        <plugins>
  3.             <plugin>
  4.                 <groupId>org.apache.maven.plugins</groupId>
  5.                 <artifactId>maven-surefire-plugin</artifactId>
  6.                 <version>3.5.2</version>
  7.             </plugin>
  8.         </plugins>
  9.     </build>
复制代码
再次运行就可以找到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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4