PowerMokito doNothing () на частном сеттере NullPointer - PullRequest
0 голосов
/ 13 января 2012

Проблема: исключение Nullpointer, возникающее при попытке выполнить PowerMockito.doNothing ().

Мне нужно создать классpartMockObject, который будет возвращать значение частного метода и ничего не делать для другого частного метода установки.

Я могу заставить его работать, если я заменю doNothing () на supress (), но хотел бы выяснить это.

Код:

@Test
public void testPowerMockito() throws Exception
{       

    final String methodName1 = "Method1";
    final String methodName2 = "Method2";

    //Using PowerMockito
    ObjectToTest partialMockObject = PowerMockito.spy(new ObjectToTest());

    //Mock the private method, expect that a false
    PowerMockito.doReturn(false).when( partialMockObject,methodName1 );

    //Do Nothing on the void private setter     
    PowerMockito.doNothing().when( ObjectToTest.class,methodName2 );

    String result = partialMockObject.methodToTest();

    assertEquals("Fail","",result);

    //Confirms that the private method was called
    PowerMockito.verifyPrivate(partialMockObject).invoke(methodName1);
    PowerMockito.verifyPrivate(partialMockObject).invoke(methodName1);

}

StackTrace:'java.lang.NullPointerException в org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing (PowerMockitoStubberImpl.java:68) в org.powermock.api.mockitoitockj.mpj.ImperMub43) atg.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when (PowerMockitoStubberImpl.java:104)

1 Ответ

1 голос
/ 13 января 2012

Я широко использовал PowerMockito, чтобы попытаться написать модульные тесты для некоторых хитрых устаревших кодов Java.Лучшее, что я могу вам сказать, это то, что не все, что вы думаете, должно работать, и что онлайн-примеры имеют смешанный возраст и качество.Шпион работает для создания verifyPrivate, но у меня был небольшой успех при использовании PowerMockito для насмешек при вызове частных методов.

У вас есть пара возможных ходов: сделайте защищенные приватные методы (и тогда вы можете просто использовать Mockito для частичного имитации, чтобы сделать то, что вы хотите сделать здесь), или рефакторинг кода, чтобы у вас не былоэти частные методы и могут @Mock другого объекта и, таким образом, имеют полный контроль над публичными вызовами.Я понятия не имею, с какими другими ограничениями вы работаете, конечно.

...