mockito怎么规定方法参数返回值
时间: 2024-09-12 16:12:05 浏览: 21
Mockito是一个流行的Java mocking框架,它允许开发者创建和配置mock对象,用于测试和隔离测试对象之间的依赖。在Mockito中,你可以使用特定的方法来规定mock对象的方法参数和返回值。
使用Mockito规定方法参数返回值的一个常见方式是使用`when().thenReturn()`语法结构。以下是使用Mockito设置方法参数和返回值的基本步骤:
1. 使用`mock()`方法创建一个mock对象。
2. 使用`when()`方法指定一个方法调用,包括方法名和参数。
3. 使用`thenReturn()`方法来定义当上述方法和参数被调用时应该返回的值。
例如:
```java
// 创建mock对象
List<String> mockedList = Mockito.mock(List.class);
// 规定当调用get(0)时返回"first"
when(mockedList.get(0)).thenReturn("first");
// 调用mock对象的方法
String result = mockedList.get(0);
// 验证返回值
assertThat(result, is("first"));
```
在这个例子中,当调用`mockedList.get(0)`时,Mockito会返回字符串"first"。
Mockito还允许定义更复杂的参数匹配规则,可以使用`any()`、`eq()`、`argThat()`等方法来匹配任意参数、特定参数或者使用自定义匹配规则。
相关问题
mockito 无返回值方法
在 Mockito 中,当我们需要模拟一个无返回值方法时,可以使用 `Mockito.doNothing()` 方法。示例如下:
```
// 假设我们要模拟一个无返回值的方法:void someMethod(String arg)
SomeClass mockedObject = mock(SomeClass.class);
// 当 someMethod 方法传入任意字符串参数时,什么也不做
doNothing().when(mockedObject).someMethod(anyString());
// 调用 someMethod 方法,不会有任何返回值
mockedObject.someMethod("test");
```
在上面的示例中,我们使用 `Mockito.doNothing()` 方法来模拟 `SomeClass` 类中的 `someMethod` 方法。该方法接受一个字符串参数,但实际上不做任何事情。我们使用 `doNothing().when(mockedObject).someMethod(anyString())` 来告诉 Mockito 在调用 `someMethod` 方法时,什么也不做。然后我们调用 `mockedObject.someMethod("test")`,该方法不会有任何返回值。
mockito 如何跳过父类方法
在使用 Mockito 进行单元测试时,如果需要跳过父类的某个方法,可以使用 Mockito 的 `doCallRealMethod()` 方法来实现。具体步骤如下:
1. 使用 `mock()` 方法创建一个被测试对象的 mock 对象。
2. 使用 `doCallRealMethod()` 方法来调用被测试对象中的某个方法。
3. 使用 `when()` 方法来设置被测试对象中的某个方法的参数和返回值。
4. 使用 `verify()` 方法来验证被测试对象中的某个方法是否被正确调用。
下面是一个示例代码:
```java
public class Parent {
public String hello() {
return "Hello from parent";
}
}
public class Child extends Parent {
@Override
public String hello() {
return "Hello from child";
}
}
// 单元测试代码
@Test
public void testChild() {
Child child = Mockito.mock(Child.class);
Mockito.doCallRealMethod().when(child).hello(); // 跳过父类方法
Mockito.when(child.hello()).thenReturn("Mocked hello");
Assert.assertEquals("Mocked hello", child.hello());
Mockito.verify(child, Mockito.times(1)).hello();
}
```
在上面的示例中,我们使用 `doCallRealMethod()` 方法来跳过了父类中的 `hello()` 方法,然后使用 `when()` 方法来设置被测试对象中的 `hello()` 方法的返回值,并最终使用 `verify()` 方法来验证 `hello()` 方法是否被正确调用。