Dove si trovano più metodi di test JUnit inseriti nel codice?

0

Ho appena letto il tutorial di Vogella JUnit e l'ho trovato molto utile per capire come utilizzare JUnit. Tuttavia, sono un po 'confuso su quale sia la convenzione per inserire più metodi di test nel codice. Il tutorial inserisce un solo metodo di test in una classe, quindi descrive come utilizzare una suite di test per raggruppare più classi di test.

Ciò significa che è prassi comune che ogni classe di test abbia un solo metodo di prova e che quindi vengano utilizzate suite di test per unirle insieme? O era solo involontario e invece la pratica comune è mettere più metodi di test in una classe?

    
posta Thunderforge 01.11.2013 - 15:28
fonte

2 risposte

4

È prassi comune avere più metodi di test in una classe.

I metodi di JUnit vengono solitamente invocati tramite riflessione raccogliendo tutti i metodi in una classe (o, come dici tu, in un'intera suite), non da un programmatore di applicazioni umane che sceglie metodi da un'API ben definita. Pertanto, non ha senso mantenere le singole classi di test brevi o leggibili; le persone non dovrebbero capire una classe che tiene unit test come un'unità coesiva nello stesso modo in cui una classe di codice di produzione dovrebbe essere coesa. Avere una classe per test mette a dura prova il proprio file system (occuparsi di migliaia di file in una directory è spesso non lineare).

    
risposta data 01.11.2013 - 15:34
fonte
3

@KilianFoth ha ragione riguardo all'inserimento di più metodi di prova in una classe di test. Tuttavia, penso che in alcuni casi può essere importante eseguire classi di test singole o anche singoli metodi di test. Ecco a cosa servono gli IDE, per semplificare questo approccio. Ad esempio, se un test richiama una routine intensiva di calcolo, che richiede alcuni minuti per terminare, potresti saltare questa parte del tempo.

Strutturazione dei test

Ogni classe nella tua cartella sorgente ottiene una classe di test unitaria nella cartella di test.

Lascia che la seguente struttura di directory sia la tua cartella di origine:

src/
  |- persistance/
  |   |- DatabaseConnection.java
  |
  |- entities/
      |- Apple.java
      |- Orange.java

Quindi la cartella per i test unitari dovrebbe avere la stessa struttura (come quando si applica lo schema del metodo di fabbrica):

test/
  |- persistance/
  |   |- DatabaseConnectionTest.java
  |
  |- entities/
      |- AppleTest.java
      |- OrangeTest.java

Per ogni metodo di una classe in src scrivi almeno due test nella classe di test unitaria - un test positivo e uno negativo. Questi test possono essere abbastanza semplici come testare il comportamento di un metodo che accetta un parametro di tipo intero e una stringa viene passata. In questo caso, potresti dire al test di aspettarsi una certa eccezione, ad esempio IllegalArgumentException :

@Test(expected=IllegalArgumentException.class)
public void testIfExceptionIsThrown { ... }

Puoi anche testare procedure più complesse (ad es. testare l'output di un algoritmo black box su un file di log).

    
risposta data 01.11.2013 - 16:36
fonte

Leggi altre domande sui tag