mockito.mockstatic 返回为void方法
时间: 2023-03-29 13:02:03 浏览: 164
Mockito.mockStatic 返回为 void 方法时,可以使用 Mockito.doNothing() 来模拟该方法的行为。具体来说,可以使用以下代码:
Mockito.mockStatic(YourClass.class);
Mockito.doNothing().when(YourClass::yourVoidMethod);
其中,YourClass 是包含 void 方法的类名,yourVoidMethod 是该类中的 void 方法名。这样,当调用该方法时,就会执行 doNothing() 方法,即不做任何操作。
相关问题
来一个Mockito.when()使用的例子
好的,下面是一个Mockito.when()的使用示例。
假设我们有一个名为`Calculator`的类,它有一个`add`方法,用于将两个数字相加。我们想要测试一个使用`Calculator`类的其他类,但是由于我们不想真正调用`add`方法,因此我们可以使用Mockito来模拟`add`方法的行为。
首先,我们需要创建一个`Calculator`类的mock对象,可以使用以下代码:
```java
Calculator calculator = Mockito.mock(Calculator.class);
```
接下来,我们可以使用`when`方法来指定当调用`add`方法时应该返回什么值。例如,我们可以指定当`add`方法的参数为2和3时,应该返回5,如下所示:
```java
Mockito.when(calculator.add(2, 3)).thenReturn(5);
```
现在,当我们在测试中调用`calculator.add(2, 3)`时,它将返回5,而不是实际执行`add`方法。这使我们能够测试我们的代码,而不会受到`add`方法的影响。
完整的示例代码如下:
```java
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.mockito.Mockito;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = Mockito.mock(Calculator.class);
Mockito.when(calculator.add(2, 3)).thenReturn(5);
assertEquals(5, calculator.add(2, 3));
}
}
```
在这个测试中,我们创建了一个`Calculator`类的mock对象,并使用`when`方法指定了`add`方法的行为。然后,我们调用`assertEquals`方法来验证`add`方法返回了我们预期的结果。
用 mockito怎么mock new 操作
在使用 Mockito 进行单元测试时,我们可以使用 `Mockito.mock()` 方法来模拟对象,但是我们无法直接 mock `new` 操作,因为它是一个 Java 关键字,而不是一个方法或对象。
不过,我们可以使用 Mockito 的 `@InjectMocks` 和 `@Spy` 注解来模拟 `new` 操作。以下是一个使用 `@InjectMocks` 和 `@Spy` 的示例:
```java
public class YourClass {
public String yourMethod() {
// Create a new object using new operator
MyClass myClass = new MyClass();
return myClass.getString();
}
public static class MyClass {
public String getString() {
return "Hello, world!";
}
}
}
@RunWith(MockitoJUnitRunner.class)
public class YourClassTest {
@InjectMocks
private YourClass yourClass;
@Spy
private YourClass.MyClass myClass;
@Test
public void testYourMethod() {
// Mock the behavior of the MyClass instance
Mockito.when(myClass.getString()).thenReturn("Mocked string");
// Call your method that creates a new MyClass instance
String result = yourClass.yourMethod();
// Assert that the method returned the mocked string
assertEquals("Mocked string", result);
}
}
```
在上面的示例中,我们使用 `@InjectMocks` 注解将 `YourClass` 实例注入到测试类中,并使用 `@Spy` 注解将 `YourClass.MyClass` 实例标记为 spy 对象。然后,我们使用 Mockito 的 `Mockito.when()` 方法来模拟 `MyClass.getString()` 方法,并将其返回一个 mock 对象。接着,我们调用被测试的方法,验证其返回的结果是否正确。
需要注意的是,使用 `@InjectMocks` 和 `@Spy` 注解需要添加 `mockito-core` 和 `mockito-all` 依赖,具体可以参考 Mockito 的官方文档。此外,Mockito 不建议过度使用 `@InjectMocks` 和 `@Spy` 注解,因为这可能会导致测试代码变得复杂和难以维护。