IDK(是否重复),但我确定找不到相关项目。我一直期望这真的很简单,因为通过反射它非常简单,但是我宁愿使用正确的工具来完成它。
澄清:旧版代码。没有吸气剂/二传手。
为此使用Whitebox是否正确?我以为是“超限”,即内部API的一部分?…或者那是严格的Mockito吗?
请参阅Whitebox.setInternalState(...)。
Whitebox.setInternalState(...)
例如-给定的类A需要测试:
A
public class A { private B b; public A() { b = new B(); } public void doSomething() { b.doSomething(); } }
具有以下私有实例B:
B
public class B { public void doSomething() { // some long running, resource intensive process... System.out.println("Real B.doSomething() was invoked."); } }
然后Whitebox可以用来设置的私有状态,A以便可以对其进行测试:
Whitebox
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(); } }