2013-07-18 5 views
0

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

Вот класс-быть проверены:

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()); 
+0

Для меня тест работает так, как ожидалось. Что вы имеете в виду, «это не удалось». Есть ли исключение, когда вы запускаете тест? Затем разместите его здесь. –

+0

@ChristopherRoscoe: привет, когда я скомпилировал его, он дал мне ошибки, как указано выше. Вы скомпилировали его успешно? благодаря – thirty

ответ

3

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

@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()); 

    } 

}