2016-05-16 23 views
6

Ho un requisito in cui devo richiamare un metodo privato di una classe astratta.Invocazione di metodi privati ​​di una classe astratta

Diciamo che la classe astratta si presenta come di seguito: -

public abstract class Base { 

    protected abstract String getName(); 

    private String getHi(String v) { 
     return "Hi " + v; 
    } 
} 

Qualcuno può farmi sapere c'è un modo posso chiamare getHi (può essere via Reflection o altri mezzi), in modo che io possa provarlo su? Sto usando Junit 4.12 e Java 8

Ho attraversato questo question ma qui i metodi non sono privati ​​nella classe astratta.

Ho anche attraversato questo question anche questo non parla di metodo privato in classe astratta.

Non sto chiedendo qui se dovremmo testare il metodo privato o no o quale sia la migliore strategia per testare metodi privati. Ci sono molte risorse disponibili nel web per quanto riguarda questo. Sto solo cercando di chiedere come dovremmo invocare un metodo privato di una classe astratta in java.

+0

Vedi http://stackoverflow.com/q/105007/3788176 –

+1

sono a conoscenza circa la discussione se si debba testare metodo privato o no. In realtà sono interessato a sapere se è possibile invocare un metodo privato di una classe astratta da un codice di prova? – tuk

+0

Vedere http://stackoverflow.com/questions/6913325/annotation-to-make-a-private-method-public-only-for-test-classes, che fornisce alcuni approcci. In particolare, [questa risposta] (http://stackoverflow.com/a/6913775/3788176) collega al doc JUnit sulla verifica dei metodi privati. –

risposta

2

sono in grado di richiamare il metodo privato di una classe astratta come segue: -

Diciamo che ho una classe che estende la classe astratta di base: -

public class Child extends Base { 
    protected String getName() { 
    return "Hello World"; 
    } 
} 

Poi io sono in grado di invocare il metodo privato come di seguito: -

Child child = new Child(); 
try { 
     Method method = Base.class.getDeclaredMethod("getHi", String.class); 
     method.setAccessible(true); 
     String output = (String) method.invoke(child, "Tuk"); 
     System.out.println(output); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
Problemi correlati