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

mockito doThrow返回null,而不是引发异常

Mockito是一个用于Java开发的开源测试框架,它可以帮助开发人员进行单元测试和集成测试。在使用Mockito进行单元测试时,有时我们希望模拟一个方法调用时抛出异常的情况。然而,有时我们也可以使用doThrow方法来模拟方法调用返回null而不是抛出异常。

doThrow方法是Mockito框架中的一个方法,它允许我们在特定条件下模拟方法调用返回null。通常情况下,我们可以使用when方法来模拟方法调用的返回值,但是当我们需要模拟方法调用抛出异常时,我们可以使用doThrow方法。

下面是使用Mockito的doThrow方法模拟方法调用返回null的示例代码:

代码语言:txt
复制
import static org.mockito.Mockito.*;

// 创建一个模拟对象
YourClass yourObject = mock(YourClass.class);

// 当调用特定方法时,模拟返回null
doThrow(null).when(yourObject).yourMethod();

// 调用被模拟的方法
yourObject.yourMethod();

在上面的示例中,我们首先创建了一个模拟对象yourObject,然后使用doThrow方法来模拟调用yourMethod方法时返回null。最后,我们调用了被模拟的方法yourMethod

需要注意的是,doThrow方法的参数是一个Throwable对象,因此我们可以传递任何继承自Throwable的异常对象,或者直接传递null来模拟返回null。

Mockito框架可以在各种场景下使用,特别是在单元测试中。它可以帮助开发人员模拟和验证方法的行为,从而提高代码的可测试性和可靠性。

关于Mockito的更多信息和用法,请参考腾讯云的Mockito相关产品和文档:

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

相关·内容

Mockito框架Mock Void方法

在编写代码时,总是有方法返回void,并且在某个测试用例需要模拟void方法。那么我们如何去做呢?让我们一起在下面的内容中使用Mockito完成这个需求。...这里要注意的最重要的是,我们不能仅仅使用Mockito的==when-then==机制来模拟void方法。因为,Mockito的when()方法适用于返回值,方法返回值是void时则不适用。...方法时引发异常 doCallRealMethod():不要模拟并调用真实方法 使用doNothing() 如果我们只想完全忽略void方法调用,则可以使用doNothing()。...()引发异常 如果要在调用方法时引发异常,则可以使用嘲笑的doThrow()方法。...让我们举一个例子:当使用null作为id调用updateName()方法时,我们将引发InvalidParamException。

10.3K31
  • SpringBoot - 单元测试利器Mockito入门

    举个例子: 类 A 需要调用类 B 和类 C,类 B 和类 C 又需要调用其他类如 D、E、F 等,假设类 D 是一个外部服务,那就会很难测,因为你的返回结果会直接的受外部服务影响,导致你的单元测试可能今天会过...---- What’s Mockito Mockito 是一种 Java Mock 框架,主要就是用来做 Mock 测试的,它可以模拟任何 Spring 管理的 Bean、模拟方法的返回值、模拟抛出异常等等...像是 Mockito 可以在单元测试中模拟一个 Service 返回的数据,不会真正去调用该 Service,通过模拟一个假的 Service 对象,来快速的测试当前想要测试的类。...userService 的 userDao Bean,已经被我们替换成假的 Mock 对象了,所以当我们再次调用 userService 的方法时,会去调用的实际上是 mock userDao Bean 的方法,不是真实的...) {…}),要改用 doThrow() 抛出 Exception。

    16.5K42

    单元测试

    避免为单元测试写测试,单元测试必须非常简单 单元测试不能相互依赖,可以独立运行 除了必要的覆盖测试用例,还要注意一些临界值 比如:null、0、“” 等 JUnit 5的使用: maven依赖: <!...("name1",event.getName()); } 当调用event.getName() 时返回 “name1” Mockito 常用 API : verify() 校验方法是否被调用 doThrow...() 模拟抛出异常 doThrow(new RuntimeException()).when(event).getName(); 当调用 event.getName() 时抛出RuntimeException...测试覆盖率   单元测试覆盖率只是一个跑分,这个不是我们最终要追求的目标。还是那句话,做单元测试不仅仅是为了完成政治任务,或者一个好看的报告。...做单元测试是为了提升代码的质量和架构,不要为了做单元测试做单元测试。 IDea工具 右键测试类 ? image.png ?

    1.7K30

    博文精选|Mockito使用指南

    但实际上,软件中是充满依赖关系的,比如我们会基于service类写操作类,service类又是基于数据访问类(DAO)的,依次下去,形成复杂的依赖关系。...它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常 PowerMock:这个工具是在EasyMock...verify(mockedList).get(0); } 对于stubbing,有以下几点需要注意: 对于有返回值的方法,mock会默认返回null、空集合、默认值。...比如,为int/Integer返回0,为boolean/Boolean返回false stubbing可以被覆盖,但是请注意覆盖已有的stubbing有可能不是很好 一旦stubbing,不管调用多少次...verify(mock).someMethod(anyInt(), anyString(), "third argument"); //上面将会抛异常,因为第三个参数不是参数匹配器,一旦使用了参数匹配器来验证

    4.2K30

    一文读懂《Effective Java》第43条:返回零长度的数组或集合,不是null

    对于一个返回null 不是零长度数组或者集合的方法,客户端几乎每次用到该方法都可能会忘记写专门处理null 返回值的代码,进而导致NPE。...返回值为null 与性能 有时候会有程序员认为:null 返回值比零长度数组更好,因为它避免了分配数组所需要的开销,但这种观点站不住脚。...在返回值这种级别上担心性能问题是不明智的,除非分析表明这个方法是造成性能问题的真正源头 对于不返回任何元素的调用,每次返回同一个零长度数组是有可能的,因为零长度数组不可变的,不可变对象可能被自由的共享...,没理由返回null,二是返回一个零长度的数组或者集合。...Java 的返回值为null 的做法,很可能是从C 语言沿袭过来的,在C 中,数组长度是与实际的数组分开返回的,如果返回的数组长度为0,再分配一个数组就没有任何好处了。

    1.6K20

    SpringBoot 单元测试利器-Mockito

    Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常...等,在了解 Mockito 的具体用法之前...管理的 bean、模拟方法的返回值、模拟抛出异常...等,他同时也会记录调用这些模拟方法的参数、调用顺序,从而可以校验出这个 mock 对象是否有被正确的顺序调用,以及按照期望的参数被调用 像是 Mockito...可以在单元测试中模拟一个 service 返回的数据,不会真正去调用该 service,这就是上面提到的 mock 测试精神,也就是通过模拟一个假的 service 对象,来快速的测试当前我想要测试的类...userService 的 userDao bean,已经被我们替换成假的 mock 对象了,所以当我们再次调用 userService 的方法时,会去调用的实际上是 mock userDao bean 的方法,不是真实的...,要改用 doThrow() 抛出 Exception Mockito.doThrow(new RuntimeException("mock throw exception")).when(userService

    2.9K10

    #Android单元测试学习总结「建议收藏」

    常见的打桩方法: 方法名 方法含义 doReturn(Object toBeReturned) 提前设置要返回的值 doThrow(Throwable… toBeThrown) 提前设置要抛出的异常 doAnswer...默认情况下,Mock出的对象的所有非void函数都有返回值,对象类型的默认返回的是null,例如返回int、boolean、String的函数,默认返回值分别是0、false和null。...它们会在内部将匹配器记录到一个栈当中,并且返回一个假的值,通常为null。 6....Person mSpyPerson; @Test public void testSpyPerson() { //将会输出Person 类中getName()的真实实现,不是...那如果想做一些事不是doNothing呢,跟Mockito一样,采用doAnswer: @Test public void testStaticVoid() throws Exception

    5.1K20

    Mockito模拟进行单元测试

    1.3 Stub和Mock异同 相同:Stub和Mock都是模拟外部依赖 不同:Stub是完全模拟一个外部依赖, Mock还可以用来判断测试通过还是失败  1.4 Mockito资源 官网: http...doThrow(new IOException()).when(outputStream).close(); outputStream.close(); } 模拟方法体抛出异常 @Test...NULL,但是使用了Answer改变了默认期望值 assertEquals(999, mock.get(1)); //下面的size()没有预设,通常情况下会返回0,但是使用了Answer...verifyNoMoreInteractions(list2); } Mockito不是创建一个真实的对象,而是模拟这个对象,他用简单的when(mock.method(params)).thenRetrun...(result)语句设置mock对象的行为,如下语句: // 设置mock对象的行为 - 当调用其get方法获取第0个元素时,返回"first" Mockito.when(mockedList.get(

    9.4K20

    Mockito模拟进行单元测试

    : 为了测试类A,我们需要Mock B类和C类(用虚拟对象来代替)如下图所示: 1.3 Stub和Mock异同 相同:Stub和Mock都是模拟外部依赖 不同:Stub是完全模拟一个外部依赖, Mock...doThrow(new IOException()).when(outputStream).close(); outputStream.close(); } 模拟方法体抛出异常 @Test...NULL,但是使用了Answer改变了默认期望值 assertEquals(999, mock.get(1)); //下面的size()没有预设,通常情况下会返回0,但是使用了Answer...verifyNoMoreInteractions(list2); } Mockito不是创建一个真实的对象,而是模拟这个对象,他用简单的when(mock.method(params)).thenRetrun...(result)语句设置mock对象的行为,如下语句: // 设置mock对象的行为 - 当调用其get方法获取第0个元素时,返回"first" Mockito.when(mockedList.get(

    6.9K20

    Mockito和PowerMock用法

    在单元测试中,我们往往想去独立地去测一个类中的某个方法,但是这个类可不是独立的,它会去调用一些其它类的方法和service,这也就导致了以下两个问题:外部服务可能无法在单元测试的环境中正常工作,因为它们可能需要访问数据库或者使用一些其它的外部系统...PowerMock可以实现完成对private/static/final方法的Mock(模拟),Mockito可以对普通的方法进行Mock,如:public等。...@mock HttpServletRequest request // 2、Person person =mock(Person.class); // 第一次调用返回"xiaoming",第二次调用返回...模拟测试无返回值的方法 Person person =mock(Person.class); doNothing().when(person).remove(); // 4、mockito还能对被测试的方法强行抛出异常...Person person =mock(Person.class); doThrow(new RuntimeException()).when(person).remove(); when(person.next

    3.1K32
    领券