How can I use powermockito verifyNew?

You are having trouble with this. I used Powermockito quite a bit in the past. This is usually pretty smooth. I decided that I would post my problem, rather than rummaging through the examples. Therefore, the goal is to test the call of a new one for the class. I don't think this is the most popular powermockito feature. Here's the test:

import static org.powermock.api.mockito.PowerMockito.verifyNew;
import static org.powermock.api.mockito.PowerMockito.whenNew;

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassUnderTest.class)
public class VerifyNewTest {

  ClassUnderTest myClassUnderTest = new ClassUnderTest();

  @Before
  public void setUp() throws Exception {
  }

  @Test
  public void test() throws Exception {
    whenNew(Collaborator.class).withNoArguments().thenReturn(new Collaborator());
    myClassUnderTest.doSomething();
    verifyNew(Collaborator.class).withNoArguments();
  }

}

and mentioned classes

public class ClassUnderTest {

  public void doSomething() {
    new Collaborator();
  }
}


public class Collaborator {

}

My goal was to make this as simple as possible. I suppose I could add some mock objects and do some work. Anyway, I get.

org.mockito.exceptions.misusing.UnfinishedStubbingException:  Unfinished stubbing detected here:
    -> at org.powermock.api.mockito.internal.invocationcontrol. MockitoNewInvocationControl.expectSubstitutionLogic(MockitoNewInvocationControl.java:65)


For instance. thenReturn()may be absent. Examples of correct trimming:

when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();

Tips:
 1. missing thenReturn()
 2. You are trying to drown out the final method, you are a naughty developer!

+3
1

whenNew() .

@Test
public void test() throws Exception {
    whenNew(Collaborator.class).withNoArguments().thenReturn(mock(Collaborator.class));
    myClassUnderTest.doSomething();
    verifyNew(Collaborator.class).withNoArguments();
}
+1

All Articles