千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 深入理解Mockito.when

深入理解Mockito.when

来源:千锋教育
发布人:xqq
时间: 2023-11-24 18:39:21 1700822361

Mockito.when是一种Mockito框架中的方法,它可以用于模拟返回值和异常。该方法接受一个方法调用作为参数,然后可以使用链式调用来模拟方法的返回值或抛出一个异常。

一、Mockito.when的基本语法

Mockito.when的语法格式如下:

when(mock.method()).thenReturn(value);
// or
when(mock.method()).thenThrow(exception);

在这里,mock是被模拟的对象,method是被模拟的方法,value是模拟的返回值,exception是模拟的异常。

使用Mockito.when时,必须先创建一个mock对象,并指定它模拟哪个类或接口。例如:

SomeInterface mock = Mockito.mock(SomeInterface.class);

这将创建一个模拟SomeInterface接口的mock对象。然后,就可以使用Mockito.when来模拟该接口的方法了。

二、Mockito.when的链式调用

使用Mockito.when的另一个强大功能是链式调用。链式调用允许我们按方法的顺序指定模拟的返回值或异常。

下面是一个简单的例子,它演示了如何使用Mockito.when和链式调用来模拟一个方法的返回值:

when(mock.getValue()).thenReturn("hello").thenReturn("world");

String first = mock.getValue(); // returns "hello"
String second = mock.getValue(); // returns "world"

在这个例子中,我们使用了两个thenReturn方法来指定两个不同的返回值。我们首先指定返回值为"hello",然后指定返回值为"world"。

当我们使用mock.getValue()方法时,Mockito会注意到我们使用了两个thenReturn方法,并依次返回它们。第一次调用时,返回值为"hello",第二次调用时,返回值为"world"。

三、Mockito.when的参数匹配器

Mockito.when还提供了参数匹配器的功能。参数匹配器允许您指定对于某些参数,Mockito应该如何模拟方法的行为。

下面是一个例子,它演示了如何使用参数匹配器:

when(mock.someMethod(anyInt(), eq("test"))).thenReturn("result");

String result = mock.someMethod(1, "test"); // returns "result"

在这个例子中,我们指定了一个参数匹配器anyInt()和一个参数匹配器eq("test")。anyInt()匹配任何整数值,eq("test")匹配"test"字符串。

当我们调用mock.someMethod(1, "test")方法时,Mockito会首先检查第一个参数是否为任何整数值(由anyInt() 匹配),然后检查第二个参数是否等于"test"字符串(由eq("test")匹配),如果两个参数都匹配,则返回"result"字符串。

四、Mockito.when的异常模拟

Mockito.when还可以用于模拟方法抛出异常的情况。你可以使用Mockito.when和thenThrow方法来模拟异常:

when(mock.someMethod()).thenThrow(new Exception());

mock.someMethod(); // throws Exception

在这个例子中,我们使用Mockito.when和thenThrow方法来模拟模拟方法抛出异常。在我们调用mock.someMethod()方法的时候,它将抛出一个Exception异常。

五、总结

在本文中,我们学习了Mockito.when的基本语法、链式调用、参数匹配器和异常模拟。Mockito.when是Mockito框架中最常用的方法之一,它允许我们使用简单、有效的语法模拟方法的行为。

下面是学习Mockito.when的完整示例代码:

public class MockExample {
    public static void main(String[] args) {
        // 创建Mock对象
        SomeInterface mock = Mockito.mock(SomeInterface.class);

        // 模拟返回值
        when(mock.getValue()).thenReturn("hello").thenReturn("world");

        String first = mock.getValue(); // returns "hello"
        String second = mock.getValue(); // returns "world"

        // 参数匹配器
        when(mock.someMethod(anyInt(), eq("test"))).thenReturn("result");

        String result = mock.someMethod(1, "test"); // returns "result"

        // 异常模拟
        when(mock.someMethod()).thenThrow(new Exception());

        try {
            mock.someMethod(); // throws Exception
        } catch (Exception e) {
            // Handle Exception
        }
    }
}

public interface SomeInterface {
    String getValue();
    String someMethod(int num, String str) throws Exception;
}

tags: mockito.when
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT