全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

深入理解Mockito.when

发布时间:2023-11-24 18:39:21
发布人:xqq

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;
}

mockito.when

相关文章

Oracle Unpivot详解

Oracle Unpivot详解

2023-11-24
Vue的computed传参详解

Vue的computed传参详解

2023-11-24
Python Float NaN

Python Float NaN

2023-11-24
linuxwrite,linuxwrite参数

linuxwrite,linuxwrite参数

2023-11-24

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31