2013-07-02 2 views
0

У меня есть следующий классКак поиздеваться следующий случай с использованием PowerMock или Easy Mock или Mockito или все

public class TestClass{ 
    ParamObject paramObject = null; 

    public TestClass(ParamObject paramObject){ 
     this.paramObject = paramObject; 
    } 

    public String getQuery(String field){ 

     String sql = field + "sometext" + getName(); 
    } 

    private String getName(){ 
     SomeObject obj = new SomeObject(); 
     return obj.getName(); 
    } 

} 

Я хочу издеваться вышеупомянутый метод GetName класса. Аргумент конструктора доступен в классе Test. Как мне это сделать.

@Test(groups = { "UNIT", "CS_RAJAN" }) 
public void TestClass_Unit_Test() throws Exception { 
    ParamObject paramObject = get();//some param object 

    //some way to pass the paramObject to the class and mock the getName() method so that it returns "ABC" 

} 
+2

Если это ваш весь класс, тогда возникает вопрос, почему вы хотите его проверить? Это частный метод, который никогда не называется. Не соглашаясь с этим, я бы сказал, что вы не должны тестировать частные методы - они определяют, как реализуется ваш класс, а не как он ведет себя. Вы должны ориентировать вас на тестирование поведения, поскольку реализации могут меняться со временем (и ваши тесты начнут сбой по какой-либо причине) – DaveH

+0

Мне кажется, что то, что вы на самом деле хотите сделать, это заглушить создание 'SomeObject', так что вы можете проверить это, используя манекен 'SomeObject', чье« имя »известно. Если вы можете подтвердить, что это соответствует вашим потребностям, я опубликую подробный ответ, описывающий, как это сделать. –

+0

На самом деле я хочу протестировать открытый метод getQuery (String field). Я хочу высмеять частный метод, чтобы вернуть текст (например, «ABC»), чтобы при вызове getQuery («Hello») я хочу получить «HellosometextABC» в методе тестирования. SomeObject - это объект Context, который правильно инициализируется при просмотре с сайта applicaiton. Это сценарий реплики, который я хочу проверить, и я уверен, что это так. – Rajan

ответ

0

Я нашел решение. Это что-то вроде этого в testClass

ParamObject paramObject = get();//Some instance 
TestClass t = PowerMock.createPartialMock(
     TestClass.class, "getName", null, paramObject); 

String expected = "ABC"; 

PowerMock.expectPrivate(t, "getName").andReturn(
     expected); 
PowerMock.replay(t); 
Смежные вопросы