java when方法_java – Mockito异常 – when()需要一个必须是模拟方法调用的参数
时间: 2024-03-14 13:50:12 浏览: 88
这个问题可能是你在使用Mockito进行单元测试时遇到的一个异常。当你使用Mockito的when()方法时,它需要一个模拟方法调用的参数,如果你提供的参数不是一个模拟方法调用,就会抛出这个异常。
解决这个问题的方法是,确保你传递给when()方法的参数是一个模拟方法调用。例如,如果你想模拟一个名为"foo"的方法,你可以这样写:
```
Foo mockFoo = mock(Foo.class);
when(mockFoo.foo()).thenReturn("bar");
```
在这个例子中,mockFoo.foo()是一个模拟方法调用,因为它是对mockFoo对象的方法调用。当你调用when(mockFoo.foo())时,它会返回一个Mockito的OngoingStubbing对象,你可以使用它来设置模拟方法的返回值。
希望这个解释能够帮助你解决这个问题。
相关问题
mockito java_Java:使用Mockito模拟ResultSet
好的,让我来回答您的问题。
在使用Mockito模拟ResultSet时,您需要按照以下步骤进行操作:
1. 创建一个Mock对象
使用Mockito框架的Mockito.mock()方法来创建一个模拟对象。例如:
```
ResultSet resultSetMock = Mockito.mock(ResultSet.class);
```
2. 设置模拟对象的行为
使用Mockito.when()方法来设置模拟对象的行为。例如:
```
Mockito.when(resultSetMock.getString("columnName")).thenReturn("columnValue");
```
这个例子中,我们告诉Mockito,当调用ResultSet.getString()方法,并传入"columnName"参数时,返回值应该是"columnValue"。
3. 使用模拟对象进行测试
使用模拟对象进行测试,就像使用真实的ResultSet对象一样。例如:
```
String columnValue = resultSetMock.getString("columnName");
assertEquals("columnValue", columnValue);
```
这个例子中,我们从模拟对象中获取了一个字符串,然后断言该字符串的值与我们预期的值相同。
希望这个回答能够解决您的问题,如果您还有其他问题,请随时提出。
Mockito.when一个多层调用的方法怎么写
您可以使用 Mockito 的链式调用来模拟多层调用的方法。例如,假设您有一个名为 `userService` 的服务,该服务中有一个名为 `getUserAddress` 的方法,该方法将调用另一个名为 `addressService` 的服务中的方法。您可以使用以下代码模拟这两个方法的调用:
```
// 创建 Mock 对象
UserService userService = Mockito.mock(UserService.class);
AddressService addressService = Mockito.mock(AddressService.class);
// 模拟 getUserAddress 方法
Mockito.when(userService.getUserAddress(Mockito.anyLong())).thenAnswer(invocation -> {
Long userId = invocation.getArgument(0);
Address address = addressService.getAddress(userId);
return address;
});
// 模拟 getAddress 方法
Mockito.when(addressService.getAddress(Mockito.anyLong())).thenReturn(new Address("123 Main St."));
```
在上面的代码中,我们首先创建了 `UserService` 和 `AddressService` 的 Mock 对象。然后,我们使用 `when` 方法来模拟 `getUserAddress` 方法的调用。在模拟 `getUserAddress` 方法时,我们使用了 `thenAnswer` 方法来自定义方法的行为。在该方法中,我们获取了 `getUserAddress` 方法的参数,并使用 `addressService` 来获取用户的地址。最后,我们返回了模拟的地址对象。
接下来,我们使用 `when` 方法来模拟 `getAddress` 方法的调用。在模拟 `getAddress` 方法时,我们使用了 `thenReturn` 方法来指定方法的返回值。
通过这种方式,我们可以模拟多层调用的方法并指定它们的行为。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)