org.powermock
powermock-module-testng
2.0.2
test
org.powermock
powermock-api-mockito2
2.0.2
test
mokito使用不再介绍,powermock可以mock静态方法:
@PrepareForTest(ZipUtil.class)
public class ExecutorTest extends PowerMockTestCase {
@InjectMocks
private Executor executor;
@Mock
private FTPService ftpService;
@BeforeMethod
public void setUp() {
MockitoAnnotations.initMocks(this);
@Test
public void testExecute() {
PowerMockito.mockStatic(ZipUtil.class);
PowerMockito.mockStatic(FileUtils.class);
PowerMockito.when(FileUtils.listFiles(any(), any(), anyBoolean())).thenReturn(Lists.newArrayList());
executor.execute(instructionDTO);
遇到问题:
java.lang.NoSuchMethodError: org.mockito.Mockito.framework()Lorg/mockito/Moc
问题原因:
参考这篇文章发现是mockito和powermock版本不一致:
异常 Exception in thread "main" java.lang.NoSuchMethodError: org.mockito.Mockito.framework()Lorg/mo... - 简书
解决方法:
安装maven dependency helper插件和maven helper插件,用于分析依赖
在pom中,点击下方的dependency analyzer,输入mock,查找mockito版本,我之前查找到时1.10.19
右键点击排除,之后手动添加mockito版本:
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>mockito-core</artifactId>
<groupId>org.mockito</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.23.4</version>
</dependency>
引入pom: <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-testng</artifactId> <version>2.0.2</version> <scope
文章目录前言单元测试(mock) 错误org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;解析01 准备01::01 安装maven dependency helper插件和maven helper插件02 问题经过03 分析依赖03 问题分析
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
单元测试(mock) 错
public class FileTest {
public boolean callInternalInstance(String path) {
File file = new File(path);
return file.exists();
测试方法:
@Test
public void ne...
在项目依赖比较复杂或者 Java 运行的环境有问题时,或者同一类型的 jar 包有不同版本存在,都可能触发该错误。本质上说是 JVM 找不到某个类的特定方法,也就是说 JVM 加载了错误版本的类。说白了,就是 JVM 找不到真正想要调用的方法啦!出现该错误的情形主要有以下两个种:
导入了不匹配的包版本;开发环境和运行环境不一致。
2 解决方法
查看“External Libraries”,看报错的方法到底存不存在,如果不存在,说明这个包一定有问题啦,更新包就可以啦;如果存在,说明包已...
单元测试(Unit Testing),是指对软件或项目中最小可测试单元进行正确性检验的测试工作。单元是人为规定最小可测试的功能模块,可以是一个模块,一个函数或者一个类。单元测试需要与模块开发进行隔离情况下进行测试。
在程序开发完成后,我们往往不能保证程序 100% 的正确,通过单元测试的编写,我们可以通过自动化的测试程序将我们的输入输出程序进行定义,通过断言来 Check 各个 Case 的结果,检测我们的程序。以提高程序的正确性,稳定性,可靠性,节省程序开发时间。我们在项目中主要用到的单元测试框架有 S.
我们知道,PowerMock也提供了对TestNG的支持
在Maven测试项目中,基于TestNG配置pom.xml文件以使用PowerMock的Mockito扩展,示例如下:
1.6.5
org.powermock
powermock-module-testng
${powermock.version}
Powermock常见注解解释
1.Mockito.mock()方法和@MockBean和@Mock的区别
Mockito.mock可以用来创建类或接口的模拟对象,并且可以使用mock来指定方法的行为,验证他们是否被调用
@Mock注解实际上是Mockito.mock()方法的缩写,我们只在测试类中使用它。
@MockBean注解在集成测试很有用,使用@mockBean注解将mock对象添加到Spring上下文中。
import javax.servlet.http.HttpServletRequest;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.mockito.Mockito.*;
public class MyServletTest {
@Mock
HttpServletRequest request;
@BeforeClass
public void setUp() {
MockitoAnnotations.initMocks(this);
@Test
public void testMyServlet() {
// 模拟HttpServletRequest对象的行为
when(request.getParameter("username")).thenReturn("testuser");
// 创建一个MyServlet实例并调用doGet方法
MyServlet servlet = new MyServlet();
servlet.doGet(request, null);
// 验证MyServlet的行为是否符合预期
verify(request).getParameter("username");
Assert.assertEquals(servlet.getOutput(), "Hello, testuser!");
在这个例子中,我们使用@Mock注解来创建HttpServletRequest对象的模拟实例。然后,我们使用Mockito的when方法来指定当调用request.getParameter("username")方法时应该返回什么值。接着,我们创建一个MyServlet实例并调用doGet方法,最后使用Mockito的verify方法来验证request.getParameter("username")是否被调用了一次。最后,我们使用TestNG的Assert类来验证MyServlet的输出是否符合预期。