I have a inner private class called MyXStream which extends com.thoughtworks.xstream.XStream
.
OuterClass.java
public class OuterClass {
private class MyXStream extends XStream {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
// implementation details
}
}
public void myMethod() {
XStream myXStream = new MyXStream();
}
}
The test case I use
OuterClassTest.java
Class myXStreamClass = Whitebox.getInnerClassType(OuterClass.class, "MyXStream");
XStream xStream = (XStream) PowerMockito.mock(myXStreamClass);
PowerMockito.whenNew(myXStreamClass).withNoArguments().thenReturn(xStream);
And it doesn't work. myXStream
is null and cause the NullPointerException. Then I tried to add a constructor to MyXStream to see what happened like this:
public class OuterClass {
private class MyXStream extends XStream {
public MyXStream() {
// some debug statements
}
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
// implementation details
}
}
}
And the test case worked.
I can also just replace withNoArguments()
with withAnyArguments()
, this also worked. Like this:
OuterClassTest.java
Class myXStreamClass = Whitebox.getInnerClassType(OuterClass.class, "MyXStream");
XStream xStream = (XStream) PowerMockito.mock(myXStreamClass);
PowerMockito.whenNew(myXStreamClass).withAnyArguments().thenReturn(xStream);
I just wondering why can't I just use withNoArguments()
if I didn't specify any constructor? Shouldn't the Java compiler create an empty one for me? What's the difference between them?
Aucun commentaire:
Enregistrer un commentaire