用 mockito怎么mock new 操作
时间: 2023-09-10 08:08:20 浏览: 254
SpringBoot项目中使用Mockito的示例代码
5星 · 资源好评率100%
在使用 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` 注解,因为这可能会导致测试代码变得复杂和难以维护。
阅读全文