2013-10-10 10 views
5

Stavo esaminando la documentazione per i test di junit ma non sono in grado di comprendere la necessità di definire i test come pubblici. Qualcuno potrebbe condividere alcune informazioni su questo?Perché i metodi di test in Junit devono essere definiti pubblici?

ho letto su https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Test.java

Ma non sono ancora chiare con la ragione.

Con volevo dire è il motivo per cui non riesco a scrivere qualcosa di così

@Test 
private void testAdd(){ } 

risposta

5

Il framework JUnit chiama i tuoi metodi di prova dall'esterno della classe di test. Se i tuoi metodi di test sono privati, non sarà in grado di farlo.

+1

Ottenuto! Ma un'altra domanda che si pone è: come nascondiamo qualsiasi metodo di test a cui non vogliamo accedere al di fuori della nostra classe di test da altri utenti? – Jagori

+1

@Jagori Qual è il caso d'uso per un metodo di prova privato? Lo scopo di un metodo di test è quello di essere eseguito dal framework JUnit, quindi non è utile avere uno privato. Puoi scrivere metodi non test privati ​​nella tua classe di test che vengono poi chiamati con un metodo di test se hai bisogno di codice non direttamente accessibile dall'esterno della classe. –

+2

In genere i test non sono inclusi negli artefatti pubblicati e pertanto non possono essere utilizzati. –

0

provare

@Test 
public void testAdd(){ } 

il metodo testAdd è privato, non sarà in grado di farlo.

+0

Sì, questo era quello che volevo capire perché solo privato e non pubblico. Immagino di avere la risposta dal momento che il framework JUnit chiama i metodi di test dall'esterno della classe di test quindi deve essere definito come pubblico. Ma un'altra domanda che sorge è: come nascondiamo qualsiasi metodo a cui non vogliamo accedere da una classe di test esterna? – Jagori

+0

Hai mai capito come nascondere le classi di test? –

1

JUnit accede ai metodi di prova tramite riflessione. Un SecurityManager può controllare l'accesso ai metodi privati. Quindi JUnit utilizza solo metodi e campi pubblici per tutto ciò a cui accede il framework.

In breve: JUnit non eseguirà metodi di test privati ​​se è attivo SecurityManager che non consente l'accesso a metodi privati.

+0

perdonami Stefan, ma non sono chiaro con questo tuo commento. Potresti approfondire cosa intendi per Junit che acceda ai metodi di prova per riflessione. – Jagori

+0

JUnit utilizza la riflessione per trovare tutti i metodi annotati con @Test. (Vedi computeTestMethods() in https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/runners/BlockJUnit4ClassRunner.java) –

Problemi correlati