Test di un metodo privato in Java [duplicato]

1

Sto scrivendo nuovi casi di test, quindi per favore portami dietro. Scrivere un caso di prova per metodi privati

public Stock getStock(String stockTicker) {
            Stock company = new Stock();
            String url = getEndpointURL(stockTicker);
            htmlDocument = fetchHTMLDocument(url); // private method
            company.name = getStockName(); // private method uses htmlDocument
            company.actualPrice = getActualPrice(); // private method uses htmlDocument
            return company;
    }

Il caso di test corrente è simile a

assertThat(selector.getActualPrice()).isGreaterThan(-1);
assertThat(selector.getStockName()).isNotNull();

Ma questo non mi consente di rendere i metodi private. .

Per rendere i metodi privati, e dal momento che voglio testare getStock usando solo metodi pubblici (come raccomandato in" Come collaudi unitamente i metodi privati? "), voglio scrivere il test case per il metodo getStock come sotto

Stock st = selector.getStock("AAPL");
assertThat(st.name).isNotNull();

io faccio asserzioni su Stock oggetto

Tuttavia, in questo test, voglio evitare la chiamata di back-end fatta da fetchHTML() e passare un documento personalizzato per testare il funzionamento del metodo getStockName() e getActualPrice() .

Come faccio a farlo senza rendere pubblici i metodi?

    
posta Incpetor 28.09.2017 - 15:53
fonte

1 risposta

5

Ho difficoltà a capire esattamente cosa stai chiedendo, ma sembra che la tua domanda abbia più a che fare con la rimozione dell'utilizzo di una richiesta HTTP effettiva piuttosto che con i metodi privati di per sé.

Invece della funzione fetchHTML che è una funzione privata di quell'oggetto, dovresti avere un oggetto separato che gestisca le richieste HTTP. È quindi possibile passare una versione fittizia di questo oggetto nel costruttore del selettore dai test e questa simulazione può restituire un valore fisso anziché eseguire una richiesta HTTP effettiva.

    
risposta data 28.09.2017 - 18:22
fonte

Leggi altre domande sui tag