首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mockito:如何单元测试void方法java mockito?

在Java中使用Mockito进行单元测试时,对于void方法,我们需要使用doAnswerdoThrowdoNothing

  1. 使用doNothing:
代码语言:javascript
复制
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import static org.mockito.Mockito.*;

public class MyServiceTest {

    @Test
    public void testVoidMethod() {
        // 创建一个mock对象
        MyService myService = Mockito.mock(MyService.class);

        // 使用doNothing,这意味着void方法将被忽略
        doNothing().when(myService).myVoidMethod();

        // 调用void方法
        myService.myVoidMethod();

        // 验证方法是否被调用
        verify(myService, times(1)).myVoidMethod();
    }
}
  1. 使用doAnswer:
代码语言:javascript
复制
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import static org.mockito.Mockito.*;

public class MyServiceTest {

    @Test
    public void testVoidMethodWithAnswer() {
        // 创建一个mock对象
        MyService myService = Mockito.mock(MyService.class);

        // 使用doAnswer允许我们指定一个自定义的行为
        doAnswer(new Answer<Void>() {
            public Void answer(InvocationOnMock invocation) {
                // 在这里编写你的行为,如果需要
                System.out.println("myVoidMethod被调用");
                return null;
            }
        }).when(myService).myVoidMethod();

        // 调用void方法
        myService.myVoidMethod();

        // 验证方法是否被调用
        verify(myService, times(1)).myVoidMethod();
    }
}
  1. 使用doThrow:
代码语言:javascript
复制
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import static org.mockito.Mockito.*;

public class MyServiceTest {

    @Test
    public void testVoidMethodWithThrow() {
        // 创建一个mock对象
        MyService myService = Mockito.mock(MyService.class);

        // 使用doThrow,当调用void方法时将抛出异常
        doThrow(new RuntimeException("抛出异常")).when(myService).myVoidMethod();

        // 调用void方法并捕获异常
        try {
            myService.myVoidMethod();
        } catch (RuntimeException e) {
            // 验证异常
            assertEquals("抛出异常", e.getMessage());
        }

        // 验证方法是否被调用
        verify(myService, times(1)).myVoidMethod();
    }
}

这些示例展示了如何使用Mockito处理void方法的单元测试。你可以根据具体需求选择使用doNothing,doAnswer或doThrow。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Mockito框架Mock Void方法

在编写代码时,总是有方法返回void,并且在某个测试用例需要模拟void方法。那么我们如何去做呢?让我们一起在下面的内容中使用Mockito完成这个需求。...Mockito是用于编写单元测试的最著名的模拟框架之一。 为什么模拟void方法 假设我们有一个方法A,在此方法中,使用了另一个void方法B。...现在,当要为该方法编写测试用例时,我们如何测试B方法被调用?另外,是否将正确的参数传递给B方法?在这种情况下,Mockito可以帮助我们解决这个问题。...这里要注意的最重要的是,我们不能仅仅使用Mockito的==when-then==机制来模拟void方法。因为,Mockito的when()方法适用于返回值,而方法返回值是void时则不适用。...如何在Mockito中模拟void方法 在Mockito中,我们可以使用不同的方法来调用实例方法或模拟void方法。

10.8K31

单元测试组件Mockito

Mock 可以分解在单元测试中耦合的其他类或者接口,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。 场景事例 ?...铛铛铛~这时候Mockito出现了(java中Mock框架比较多,但是本篇只介绍这个),它会把那些繁琐的依赖统统转化为Mock Object,如下图,这样我们就可以专注的进行我们的单测,减少在解决依赖上浪费的时间了...直接开干 关于Mockito的简介这里就不在赘述了,大家有兴趣可以自行去官方文档查阅,这里主要带大家了解一些常用的Mock方法。....*; 基础方法 @Test public void testMockBase(){ //创建ArrayList的Mock对象 List mockList = mock...更多详细的用法,大家可以直接参考官方文档,因为各种“奇技淫巧”确实比较多,后面也更新对java8 lambda的支持,很多功能还是期待大家去挖掘~

4.1K30
  • Java单元测试Mock工具Mockito介绍

    //用户被禁用 } } } 上面是个简单的例子,在添加帖子的时候需要调用用户服务来查询用户信息,这里不讨论代码组织是否合理,是否用到了DDD,只是一个例子说明如何使用...Mockito; 先看看spy方法如何Mock: import static org.mockito.Mockito.spy; public class PostServiceTest extends...Mockito.when(..).thenReturn when传方法,thenReturn传递要返回的结果,如果when要带参数,一般是这样的格式, Mockito.anyInt(),Mockito定义了很多常用类型...,可以根据自己需要选择; 3、模拟静态方法 如果要用Mockito模拟静态方法,一是要保证Mockito包版本在3.4.0以上,二是需要额外加mockito-inline依赖,如下: test 加好依赖后,通过 Mockito.mockStatic 来模拟静态方法。

    3.3K40

    SpringBoot - 单元测试利器Mockito入门

    ---- What’s Mockito Mockito 是一种 Java Mock 框架,主要就是用来做 Mock 测试的,它可以模拟任何 Spring 管理的 Bean、模拟方法的返回值、模拟抛出异常等等...像是 Mockito 可以在单元测试中模拟一个 Service 返回的数据,而不会真正去调用该 Service,通过模拟一个假的 Service 对象,来快速的测试当前想要测试的类。...目前在 Java 中主流的 Mock 测试工具有 Mockito、JMock、EasyMock等等,而 SpringBoot 目前默认的测试框架是 Mockito 框架。...user = userService.getUserById(9); //会抛出一个RuntimeException 如果方法没有返回值的话(即是方法定义为 public void myMethod(...注意事项 上述就是 Mockito 的 Mock 对象使用方法,不过当使用 Mockito 在 Mock 对象时,有一些限制需要遵守: 不能 Mock 静态方法 不能 Mock private 方法

    17.1K42

    Java单元测试框架之Mockito指南

    概述 Mockito 框架是用于单元测试的基本框架,本文将介绍其使用使用方法及作用,也会给出相对应的例子作为参考。详细的业务场景可以参考一下项目中的单元测试编写。...Mockito.verify(mockList, timeout(200).atLeastOnce()).size(); } 二、如何做一些测试桩 stub 默认情况下,所有的函数都有返回值。...-1443344 JUnit + Mockito 单元测试:JUnit + Mockito 单元测试(二)_invocationonmock-CSDN博客 Mockito 中*@Mock* 与*@InjectMock...的对象属性及方法的默认值:Mockito 中被 Mocked 的对象属性及方法的默认值 - Boblim - 博客园 单元测试工具之 Mockito:单元测试工具之Mockito_mockito作用-...by: java.ang .runtimeexception: cl-CSDN博客 ****测试覆盖率无法统计解决:[idea 单元测试 覆盖率不显示问题,no coverage result_idea

    3.1K11

    Mockito模拟进行单元测试

    MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,...; import java.util.List; import static org.mockito.Matchers.any; import static org.powermock.api.mockito.PowerMockito.when...bakWrapper.in("name", collectUserNameList); return userBakService.list(bakWrapper); } } 要进行单元测试的类方法用...,可以看到是通过代理进行调用的 最后方法也根据我们设定好的数据进行了输出,并没有进行调用mysql的操作:这样的好处时在生产环境跑单元测试时也不会影响数据库的数据 注意这次调用:有通过AopContext...来获取当前代理类的操作,但是当前单元测试并没有走spring的生命周期,bean也没有交给spring进行管理,那么调用这个静态方法肯定是要报错的,那么如何解决呢?

    7K20

    Mockito模拟进行单元测试

    MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,...; import java.util.List; import static org.mockito.Matchers.any; import static org.powermock.api.mockito.PowerMockito.when...bakWrapper.in("name", collectUserNameList); return userBakService.list(bakWrapper); } } 要进行单元测试的类方法用...最后方法也根据我们设定好的数据进行了输出,并没有进行调用mysql的操作:这样的好处时在生产环境跑单元测试时也不会影响数据库的数据 ?...注意这次调用:有通过AopContext来获取当前代理类的操作,但是当前单元测试并没有走spring的生命周期,bean也没有交给spring进行管理,那么调用这个静态方法肯定是要报错的,那么如何解决呢

    9.5K20

    Mockito + JUnit 单元测试实例

    文章目录 前言 创建项目并添加依赖 编写代码并测试 总结 前言 在日常 Java 开发中,一般都需要进行单元测试,而 Mock 测试则是单元测试中的重要方法之一。...配置完成后,IDEA 会在 test/java 文件夹下自动创建包并生成对应测试类,最终自动生成的测试类如下。 最后,我们按照 Mock 测试的三个步骤来书写代码,得到最终的测试方法如下。...class DemoTest { @Test void sum() { Demo demo = Mockito.mock(Demo.class); Mockito.when...class DemoTest { @Test void sum() { Demo demo = Mockito.mock(Demo.class); Mockito.when...一方面是如何创建并添加对应依赖,另一方面则是如何编写代码并自动生成对应测试类,然后编写测试代码。而更多关于 Mockito 的使用技巧,我们将到另一篇文章中进行介绍。

    3.3K10

    使用 Junit + Mockito 实践单元测试

    单元测试的目标是一小段代码,例如方法或类。方法或类的外部依赖关系应从单元测试中移除,而改为测试框架创建的 mock 对象来替换依赖对象。...单元测试一般由开发人员编写,通过验证或断言目标的一些行为或状态来达到测试的目的。 二、JUnit 框架 JUnit 是一个测试框架,它使用注解来标识测试方法。...框架 从上面的介绍我们可以认识到,如何减少对外部的依赖才是实践单元测试的关键。...我们要单元测试的内容,常常包含着对数据库的访问等等,那么我们要如何 mock 掉这部分调用呢?...3.3 使用 PowerMock mock 静态方法。 Mockito 也有一些局限性。例如:不能 mock 静态方法和私有方法。有关详细信息,请参阅 Mockito限制的常见问题解答。

    4.7K50

    MeterSphere单元测试-Mockito-Inline出场

    即使在addTestPlan这个方法的内部,也是存在着不少未被测试到的业务逻辑。因此,通过单元测试来补充测试覆盖也是一种质量内建的有效方式。...; import java.util.Arrays; import java.util.List; import static org.assertj.core.api.Assertions.assertThatThrownBy...测试用例-Mockito-Inline登场 在使用Mockito来mock testPlanMapper模拟数据库返回的基础上,还需要额外对以下两个两个静态方法的调用进行Mock。...mock静态方法的能力,只是目前还没有被吸收进Mockito-core中,因此,需要将Mockito的依赖修改为对Mockito-Inline的依赖。...因此,额外引入了Mockito-Inline来mock 静态方法让整个测试桩能符合测试场景的要求,并最终执行成功。

    3.4K10

    SpringBoot 单元测试利器-Mockito

    Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常...等,在了解 Mockito 的具体用法之前...Mockito 简介 说完了 mock 测试的概念,接下来我们进入到今天的主题,Mockito Mockito 是一种 Java mock 框架,他主要就是用来做 mock 测试的,他可以模拟任何 Spring...目前在 Java 中主流的 mock 测试工具有 Mockito、JMock、EasyMock..等,而 SpringBoot 目前内建的是 Mockito 框架 题外话说一下,Mockito 是命名自一种调酒莫吉托...(即是方法定义为public void myMethod() {...})...总结 Mockito 是一个非常强大的框架,可以在执行单元测试时帮助我们模拟一个 bean,提高单元测试的稳定性 并且大家可以尝试在写代码时,从 mock 测试的角度来写,更能够写出功能切分良好的代码架构

    3.9K20

    单元测试框架spock和Mockito应用

    先介绍一下两位主角 spock是一款基于Groovy语言的单元测试框架,其基础也是Java的Junit,目前最新版已经到了2.0,但对Groovy和响应的Java版本要求较高,具体信息参考:Spock...Mockito是一个模拟测试框架,可以让你用优雅,简洁的接口写出漂亮的单元测试。Mockito可以让单元测试易于可读,产生简洁的校验错误。TDD测试驱动开发要求我们先写单元测试,再写实现代码。...在写单元测试的过程中,由于各种依赖的关系导致的阻碍,我们必需用到Mockito类似的框架来完成资源、对象的模拟。...import static org.mockito.Matchers.anyInt import static org.mockito.Mockito.* class Demo extends Specification...参考文章: Maven和Gradle中配置单元测试框架Spock Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock数据驱动Demo ---- 郑重声明:“FunTester

    2.3K50

    如何使用调试与测试技巧:使用JUnit和Mockito简化单元测试

    对于Java开发者来说,JUnit和Mockito是两个非常常用的工具,它们能够显著简化单元测试,减少调试和测试中的复杂性。...本文将详细介绍如何使用JUnit和Mockito进行调试和测试,帮助你轻松编写高质量的Java代码。 引言 软件开发的过程通常包含编写、调试、测试和维护等多个环节,其中测试环节是保证软件质量的关键。...单元测试通过自动化测试确保代码的正确性,及时发现潜在的BUG。而调试则帮助开发者定位和修复问题,使得开发过程更加高效。 在Java开发中,JUnit和Mockito是两个非常流行的测试工具。...本文将为你介绍如何使用JUnit进行单元测试,并结合Mockito进行mock操作,降低测试的复杂性和提高效率。 调试与测试技巧:使用JUnit和Mockito简化单元测试 正文 1....总结 在现代Java开发中,调试和测试是确保代码质量的关键环节。通过使用JUnit和Mockito,我们可以: 使用JUnit简化单元测试,自动化测试执行,并确保代码的正确性。

    8800

    告别加班解放双手提高单测覆盖率之Java 自动生成单测代码神器推荐

    使用方法: 可以在顶部菜单 [Squaretest] 菜单中选择第一个或者使用对应快捷键创建单元测试。...JUnit 4/5, TestNG 单元测试 自动生成 Mockito mocks 自动生成 测试参数和断言语句 自动生成相关 mock 方法 IDEA 菜单: Code->TestMe, Code...缺点:默认模板会在生成的方法上都加上 throws Exception 示例代码1: 或者直接使用快捷键 生成的代码: 这个例子比较简单,只是给大家演示如何使用,实际使用中类复杂时,就能体会到该插件的强大...2.2.2 定制化 大家还可以根据自己需要对模板进行修改: 默认模板存在几个问题: 1、没有在类上增加 @RunWith(MockitoJUnitRunner.class) 注解 2、单元测试方法后面默认会带上...《Java 单元测试生成测试字符串的神器:java-faker》 如果我们想要随机构造人名、地名、天气、学校、颜色、职业,甚至符合某正则表达式的字符串 四、总结 灵活使用单元测试自动生成插件,可以节省很多时间

    6.4K20

    Java开发中的测试驱动开发(TDD)JUnit与Mockito的应用指南

    在Java开发中,JUnit和Mockito是最常用的两种测试工具。JUnit用于单元测试,而Mockito是一个模拟框架,允许你在测试中模拟对象的行为。...本文将深入探讨TDD的概念,并展示如何使用JUnit和Mockito来实现测试驱动开发。1. 什么是测试驱动开发(TDD)?...JUnit在TDD中的应用JUnit是一个广泛使用的Java测试框架,支持编写和执行单元测试。在TDD中,JUnit负责验证代码的正确性。...我们将编写一组单元测试来验证这些方法的正确性。...8.2 JUnit与Mockito的角色JUnit:作为Java的标准单元测试框架,JUnit为TDD提供了基础设施,允许开发人员编写和执行自动化测试用例。

    14420
    领券