I want to mock super() call that has protected contructor.
For this purpose i use "PowerMockito.suppress" but it isn't work (the code call super constructor and it throw runtimeException).
How to mock super call(), so it doesn't do anything.
public class FooClass {
public void someMethod(){
String arg1 = "arg1";
Integer arg2 = 123;
ExtendedClass extendedClass = new ExtendedClass(arg1, arg2);
}
}
public class SuperClass {
protected SuperClass(String arg1, Integer arg2) {throw new RuntimeException();}
}
public class ExtendedClass extends SuperClass{
public ExtendedClass(String arg1, Integer arg2){
super(arg1, arg2);
}
}
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(MockitoJUnitRunner.class)
@PowerMockIgnore({"javax.management.*", "org.apache.http.conn.ssl.*", "com.amazonaws.http.conn.ssl.*", "javax.net.ssl.*"})
@PrepareForTest({SuperClass.class})
public class TestClass extends TestCase{
@InjectMocks
FooClass fooClass = new FooClass();
@Test
public void test(){
PowerMockito.suppress(PowerMockito.constructor(SuperClass.class, String.class, Integer.class));
fooClass.someMethod();
}
}
You have to Prepare ExtendedClass for Test and not SuperClass.
change
@PrepareForTest({SuperClass.class})
PowerMockito.suppress(PowerMockito.constructor(SuperClass.class, String.class, Integer.class));
to
@PrepareForTest({ExtendedClass.class})
PowerMockito.suppress(PowerMockito.constructor(ExtendedClass.class, String.class, Integer.class));