A extends B 怎么使用PowerMock mock B里面的方法
时间: 2024-10-23 18:07:26 浏览: 26
当你有一个场景,A类继承自B类,而你想在单元测试中mock B类的部分方法以便控制其行为时,可以使用PowerMock框架配合Junit一起工作。以下是步骤:
1. **添加依赖**:首先,确保你的项目中有PowerMock和Mockito的依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>最新版本号</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>最新版本号</version>
<scope>test</scope>
</dependency>
```
2. **创建测试类**:在你的测试类上添加`@RunWith(PowerMockRunner.class)`注解,并在测试方法上使用`@PrepareForTest(B.class)`来标记需要mock的类。
```java
@RunWith(PowerMockRunner.class)
@PrepareForTest({B.class})
public class ATest {
@Test
public void testMethod() {
// ...
}
}
```
3. **Mocking B类方法**:在测试方法内部,你可以使用`@Tested`注解来明确指出你想mock的类实例,然后通过`when()`方法模拟方法行为。
```java
@Test
public void testMethod() {
B mockB = PowerMockito.mock(B.class);
// 模拟B类的方法
when(mockB.someMethod()).thenReturn("mocked result");
A a = new A(mockB); // 创建A类实例,传递mock的B对象
// 现在在A的上下文中调用B的方法会被mock的行为覆盖
String result = a.getMethodThatUsesB();
assertEquals("mocked result", result);
// PowerMockito.verifyStatic() 或 verify(mockB) 可以用于验证mock方法是否被正确调用
PowerMockito.verify(mockB).someMethod();
}
```
阅读全文