2016-07-26 9 views
0

Мне нужно издеваться над защищенным методом в родительском классе моего класса, но родительский класс находится в другом пакете. Я думал, что решение будет состоять в использовании PowerMockito.spy(), но я не могу создать экземпляр типа Child, потому что он абстрактный. Должно быть решение этой проблемы без рефакторинга.Mock Protected Parent Method Когда родитель находится в другом пакете, а дочерний класс - абстрактно

Зависимости.

 <dependency org="org.powermock" name="powermock-core" rev="1.6.4"/> 
     <dependency org="org.powermock" name="powermock-module-junit4" rev="1.6.4"/> 
     <dependency org="org.powermock" name="powermock-api-mockito" rev="1.6.4"/> 

Это устаревший код, поэтому я не могу реорганизовать, но вот упрощенный код.

Parent.java

package parent; 

public class Parent { 

    // Want to mock this protected parent method from different package 
    protected String foo() { 

     String someValue = null; 

     // Logic setting someValue 

     return someValue; 
    } 
} 

Child.java

package child; 

import parent.Parent; 

public abstract class Child extends Parent { 

    String fooString = null; 

    public String boo() { 

     this.fooString = this.foo(); 

     String booString = null; 

     // Logic setting booString 

     return booString; 
    } 
} 
+1

Каждый раз, когда некоторые DEV пишет 'String xxx = null', умирает котенок. Что касается вопроса, я читал его 3 раза, и мне очень жаль, но я не понимаю, о чем вы спрашиваете. Вы спрашиваете, как создать экземпляр абстрактного класса? –

+0

haha ​​Я просто бросил вместе быстрый пример. Это похоже на этот [вопрос] (http://stackoverflow.com/questions/34684328/mock-protected-parent-method-when-the-parent-is-in-a-different-package?rq=1), но Я не могу использовать 'PowerMockito.spy()' здесь, потому что тестируемый класс является абстрактным. – javaPlease42

+0

Итак, я хочу издеваться над методом 'Parent.boo()', а мой класс - 'Child'. Поэтому мне нужно использовать 'Mockito.spy (Child.class)' вместо 'PowerMockito.spy (new Child())', потому что Child является абстрактным. – javaPlease42

ответ

0

Вы можете использовать PowerMock для фиктивных методов, которые не являются публичными

@RunWith(PowerMockRunner.class) 
public class ChildTest { 

    @Test 
    public void testBoo() throws Exception { 
     Child child = PowerMockito.mock(Child.class); 
     PowerMockito.when(child, "foo").thenReturn("someValue"); 
     PowerMockito.doCallRealMethod().when(child).boo() 
     String boo = child.boo(); 

     //assert here whatever you want to assert 
    } 
}