Частичный фиктивный частный метод с PowerMock-Mockito

Я новичок в Mockito и PowerMock. Мне нужно протестировать некоторый устаревший код, у которого есть частный метод, который я должен издеваться. Я рассматриваю возможность использования частной функции частичного издевательства от PowerMock, я попытался имитировать пример из link, но это не удалось. Я понятия не имею, что с этим не так. Не могли бы вы помочь проверить это? Спасибо

Вот класс, который нужно протестировать:

package test;

public class ClassWithPrivate
{

     private String getPrivateString() {
       return "PrivateString";
     }

     private String getPrivateStringWithArg(String s) {
       return "PrivateStringWithArg";
     }

 }

И это тестовый код:

package test;

import static org.mockito.Mockito.*;
import static org.mockito.Matchers.anyString;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.powermock.api.support.membermodification.MemberMatcher.method;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.api.support.membermodification.MemberMatcher;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithPrivate.class)
public class ClassWithPrivateTest {

    @Test
    public void testGetPrivateString() {

         ClassWithPrivate spy = PowerMockito.spy(new ClassWithPrivate());

         PowerMockito.doReturn("Do").when(spy, method(ClassWithPrivate.class, "getPrivateStringWithArg", String.class)).withArguments(anyString());

    }

}

EDIT При попытке скомпилировать код возникли следующие ошибки:

ClassWithPrivateTest.java:26: unreported exception java.lang.Exception; must be caught or declared to be thrown
     PowerMockito.doReturn("Do").when(spy, method(ClassWithPrivate.class, "getPrivateStringWithArg", String.class)).withArguments(anyString());
                                     ^
ClassWithPrivateTest.java:26: unreported exception java.lang.Exception; must be caught or declared to be thrown
     PowerMockito.doReturn("Do").when(spy, method(ClassWithPrivate.class, "getPrivateStringWithArg", String.class)).withArguments(anyString());

person wlhee    schedule 18.07.2013    source источник
comment
Для меня тест работает так, как ожидалось. Что значит с ним не получилось. Есть ли исключение, когда вы запускаете тест? Тогда опубликуйте это здесь.   -  person Christopher Roscoe    schedule 19.07.2013
comment
@ChristopherRoscoe: привет, когда я скомпилировал его, он выдал мне ошибки, как указано выше. Вы успешно скомпилировали его? Спасибо   -  person wlhee    schedule 19.07.2013


Ответы (1)


Я обнаружил проблему, методы тестирования ожидают исключения. После того, как я изменил его следующим образом, он работает нормально.

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithPrivate.class)
public class ClassWithPrivateTest {

   @Test
   public void testGetPrivateString() throws Exception {

     ClassWithPrivate spy = PowerMockito.spy(new ClassWithPrivate());

     PowerMockito.doReturn("Do").when(spy, method(ClassWithPrivate.class, "getPrivateStringWithArg", String.class)).withArguments(anyString());

   }

}
person wlhee    schedule 19.07.2013