I want to mock final class' constructor. Example code is below. it doesn't work. it throw runtime exception. Please help me how to mock final class' constructor
Thanks.
I know this question quest, it doesn't work. All classes are not final Given question. In my question contains final class.
This is container class
public class FooClass {
public void someMethod(){
FinalClass finalClass = new FinalClass("arg1");
finalClass.printMsg();
}
}
This is final class:
public final class FinalClass {
public FinalClass() {
this("some msg");
}
public FinalClass(String arg1){
throw new RuntimeException("msg");
}
public void printMsg(){
System.out.println("success");
}
}
This is test class:
@RunWith( PowerMockRunner.class )
@PowerMockRunnerDelegate(MockitoJUnitRunner.class)
@PowerMockIgnore({"javax.management.*", "org.apache.http.conn.ssl.*", "com.amazonaws.http.conn.ssl.*", "javax.net.ssl.*"})
@PrepareForTest({FinalClass.class})
public class FooTest {
@InjectMocks
FooClass fooClass;
@Before
public void before() throws MalformedURLException {
MockitoAnnotations.initMocks(this);
}
@Test
public void finalClass() throws Exception {
FinalClass finalClassMock = PowerMockito.mock(FinalClass.class);
PowerMockito.whenNew(FinalClass.class).withAnyArguments().thenReturn(finalClassMock);
fooClass.someMethod();
}
}
You said that question is same with my question. But do you try my question, that solution not work because of final class. Please read question carefully.