whenNew
如果我有兩個構造器不能正常工作運行。在下面的代碼片段,我需要真正的構造被稱爲第二次,但我得到一個NullPointerException
代替。PowerMockito whenNew不與多個構造
@RunWith(PowerMockRunner.class)
public class UtilTest {
@Test
public void test()throws Exception {
A a= new A();
a.setI(10);
whenNew(A.class).withNoArguments().thenReturn(a);
UtilTest test= new UtilTest();
test.testA();
}
private void testA(){
A a1= new A();
System.out.println(a1.getI());
A a2= new A(50);
System.out.println(a2.getI());
}
}
class A{
int i=1;
public A(){}
public A(int i){
this.i=i;
}
public void setI(int i){
this.i=i;
}
public int getI(){
return this.i;
}
}
輸出 -
10
java.lang.NullPointerException
** 1)**除非我加上'@PrepareForTest(UtilTest.class)'會成功打印10 50 ** 2)**如果你不關心它的構造函數被調用,然後使用'whenNew(A.class).withAnyArguments()。thenReturn(a);'。 ** 3)**如果你關心的構造函數,然後定義每個的那麼值** 4)**否則會給我們一些背景,因爲這是一個有點奇怪的理解,爲什麼和你需要什麼。 – Morfic
對不起,@Morfic如果我不夠清楚。我的預期輸出爲10和50。1) - 它會給1 50 2)3)我不關心哪個構造嘲笑。 4)我的目的是嘲笑構造函數沒有參數,但沒有其他人。對象創建的部分模擬,不知道是否有可能。 – shashankaholic
不知道這是可能的,但除非我失去了你的觀點,你應該能夠嘲笑你的** A **,並返回10,然後50'格提()'。大致如下:'A mockA = mock(A.class);當(mockA.getI())。然後返回(10,50); whenNew(的A.class).withAnyArguments()thenReturn(mockA);'。不要忘了'@PrepareForTest(UtilTest.class)' – Morfic