您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页mock连续调用方法

mock连续调用方法

来源:飒榕旅游知识分享网
mock连续调用方法

Mock是一种测试框架,它可以模拟对外接口的调用,以便我们可以在不依赖于真实的接口的情况下进行测试。在使用Mock时,我们经常会遇到连续调用多个方法的情况,这时我们可以使用Mock的连续调用方法来解决这个问题。

Mock的连续调用方法有两种:thenReturn和thenThrow。其中thenReturn用于模拟方法的返回值,而thenThrow用于模拟方法的异常。下面我们将分别介绍这两种连续调用方法的使用方法和注意事项。

连续调用方法之thenReturn

在使用thenReturn方法时,我们需要先创建一个Mock对象,并使用when方法来指定需要模拟的方法和参数。例如,我们有一个UserService类,其中有一个getUserById方法,该方法接受一个userId参数并返回一个User对象。我们可以使用Mockito来模拟这个方法的返回值,代码如下:

```java

UserService userServiceMock = mock(UserService.class); User user = new User(); user.setId(1L);

user.setName(\"Tom\");

when(userServiceMock.getUserById(1L)).thenReturn(user); ```

在这个例子中,我们创建了一个UserService的Mock对象userServiceMock,并使用when方法来指定当getUserById方法的参数为1L时,返回一个user对象。

需要注意的是,thenReturn方法只会对指定的方法和参数生效,如果我们没有指定所有可能的参数,那么未指定参数的方法调用将会返回null。例如,如果我们没有指定getUserById方法的参数为2L

userServiceMock.getUserById(2L)时,将会返回null。

我们也可以使用thenReturn方法来模拟方法的多次调用。例如,我们有一个getUsers方法,该方法返回一个List对象。我们可以使用Mockito来模拟该方法的返回值,代码如下:

```java

List userList = new ArrayList<>(); User user1 = new User(); user1.setId(1L);

user1.setName(\"Tom\"); userList.add(user1); User user2 = new User();

user2.setId(2L);

user2.setName(\"Jerry\"); userList.add(user2);

UserService userServiceMock = mock(UserService.class); when(userServiceMock.getUsers()).thenReturn(userList).thenReturn(Collections.emptyList()); ```

在这个例子中,我们创建了一个包含两个User对象的List对象userList,并使用Mockito来模拟UserService的getUsers方法的返回值。我们首先指定当调用一次getUsers方法时,返回userList对象;然后指定当调用第二次getUsers方法时,返回空的List对象。

需要注意的是,thenReturn方法的调用顺序与指定的顺序相同。在上面的例子中,当我们调用两次userServiceMock.getUsers()时,第一次将返回userList对象,第二次将返回空的List对象。

连续调用方法之thenThrow

当我们需要模拟方法抛出异常时,我们可以使用Mockito的thenThrow方法。与thenReturn方法类似,我们需要先创建一个Mock对象,并使用when方法来指定需要模拟的方法和参数。例如,我们有一个UserService类,其中有一个deleteUserById方

法,该方法接受一个userId参数并抛出一个

UserNotFoundException异常。我们可以使用Mockito来模拟这个方法抛出异常,代码如下:

```java

UserService userServiceMock = mock(UserService.class); doThrow(new

UserNotFoundException()).when(userServiceMock).deleteUserById(1L); ```

在这个例子中,我们创建了一个UserService的Mock对象userServiceMock,并使用deleteUserById

doThrow

1L

方法来指定当时,抛出一个

方法的参数为

UserNotFoundException异常。

需要注意的是,thenThrow方法只会对指定的方法和参数生效,如果我们没有指定所有可能的参数,那么未指定参数的方法调用将会正常执行。例如,如果我们没有指定deleteUserById方法的参数为

2L

userServiceMock.deleteUserById(2L)时,将会正常执行。

我们也可以使用thenThrow方法来模拟方法的多次调用。例如,我们有一个

deleteAllUsers

方法,该方法抛出一个

UserNotFoundException异常。我们可以使用Mockito来模拟该方法抛出异常,代码如下:

```java

UserService userServiceMock = mock(UserService.class); doThrow(new

UserNotFoundException()).doNothing().when(userServiceMock).deleteAllUsers(); ```

在这个例子中,我们创建了一个UserService的Mock对象userServiceMock,并使用doThrow方法来指定当调用一次deleteAllUsers方法时抛出一个UserNotFoundException异常;然后使用doNothing方法来指定当调用第二次deleteAllUsers方法时不抛出异常。

需要注意的是,thenThrow方法的调用顺序与指定的顺序相同。在上

userServiceMock.deleteAllUsers()时,第一次将抛出UserNotFoundException异常,第二次将不抛出异常。

总结

Mock的连续调用方法可以帮助我们模拟方法的多次调用和异常抛

出,从而更好地进行测试。在使用连续调用方法时,我们需要注意指定所有可能的参数和调用顺序,以避免出现意外的情况。同时,我们也可以使用Mockito的其他功能来更好地进行测试。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务