【发布时间】:2021-05-25 20:33:05
【问题描述】:
我正在使用 PowerMockito 为一个类编写 junit。我能够模拟私有方法但无法模拟另一个类的公共方法。在下面的测试类中, B 的对象没有被嘲笑。 我在这里做错了什么?
class A {
B b = new B();
public String handleData() {
String parameter = getParameter();
String data = b.getData();
.....
}
private String getParameter(){
.......
.....
}
}
另一个具有所有公共方法的 B 类
class B {
public String getData() {
.......
.....
}
}
现在我有了 A 类的测试类
@PowerMockIgnore("javax.management.*")
@RunWith(PowerMockRunner.class)
@PrepareForTest(fullyQualifiedNames = "org.example.A")
class TestA {
@Mock
B b;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void handleDataTest()
A a = spy(new A());
doReturn("test").when(a, "getParameter");
>>>>> when(b.getData().thenReturn("test);
.........
.....
AssertNotNull(a.handleData());
}
以下是我正在使用的依赖项-
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.0-beta.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.0-beta.5</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.13.0</version>
<scope>test</scope>
</dependency>
【问题讨论】:
-
"
when(b.getData().thenReturn("test);" - 这不会编译。 --- 我强烈建议尽可能不要使用 powermock,因为 powermock 使用字节码操作。
标签: java mockito powermockito