作为重复项提出的解决方案不是 PowerMockito 解决方案,因此无法回答此问题。此外,这个问题在下面得到了合理的回答。
我不知道这是否是重复的,但我肯定找不到有问题的项目(如果是)。我一直期望这非常简单,因为反射非常简单,但我宁愿使用正确的工具来完成它。
澄清:遗留代码。没有 getter/setter。
为此使用 Whitebox 是否正确?我认为这是“限制”,即内部 API 的一部分? ...或者严格来说是 Mockito?
See Whitebox.setInternalState(...)
.
例如 - 给定班级A
需要测试的是:
public class A {
private B b;
public A() {
b = new B();
}
public void doSomething() {
b.doSomething();
}
}
其中有一个私有实例B
:
public class B {
public void doSomething() {
// some long running, resource intensive process...
System.out.println("Real B.doSomething() was invoked.");
}
}
then Whitebox
可以用来设置私有状态A
所以可以测试一下:
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.powermock.reflect.Whitebox;
@RunWith(MockitoJUnitRunner.class)
public class ATest {
@Mock
private B b;
private A a;
@Before
public void prepareTest() {
doNothing().when(b).doSomething();
a = new A();
Whitebox.setInternalState(a, B.class, b);
}
@Test
public void doSomething() {
a.doSomething();
verify(b).doSomething();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)