whenNew
не работает, если у меня есть два конструктора - один без аргументов и один с аргументами. В фрагменте кода ниже мне нужно, чтобы реальный конструктор вызывался во второй раз, но вместо этого я получаю NullPointerException
.
@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
@PrepareForTest(UtilTest.class)
, он будет успешно печатать 10 и 50. 2) Если вам не важно, какой конструктор вызывается, используйтеwhenNew(A.class).withAnyArguments().thenReturn(a);
. 3) Если вы заботитесь о конструкторе, то определите значения для каждого из них, а затем 4) В противном случае дайте нам некоторый контекст, потому что это немного странно понимать, почему и что вам нужно. - person Morfic   schedule 06.10.2015getI()
. Что-то вроде:A mockA = mock(A.class); when(mockA.getI()).thenReturn(10, 50); whenNew(A.class).withAnyArguments().thenReturn(mockA);
. Не забудьте@PrepareForTest(UtilTest.class)
- person Morfic   schedule 06.10.2015