2009-04-15 13 views
64

Esiste un modo per dire a JUnit di eseguire un test case specifico più volte con dati diversi continuamente prima di passare al caso di test successivo?Esecuzione dello stesso caso di test JUnit più volte con dati diversi

+4

Usando le teorie (come indicato da @dfa), Junit tratterà tutti i test come un test e renderà più difficile capire quale test ha fallito. Considerando che i Test parametrizzati (come sottolineato da @ jjnguy) li considerano tutti come test diversi, indicando chiaramente quale test è fallito. – mindreader

risposta

63

un'occhiata a junit 4.4 theories:

import org.junit.Test; 
import org.junit.experimental.theories.*; 
import org.junit.runner.RunWith; 

@RunWith(Theories.class) 
public class PrimeTest { 

    @Theory 
    public void isPrime(int candidate) { 
      // called with candidate=1, candidate=2, etc etc 
    } 

    public static @DataPoints int[] candidates = {1, 2, 3, 4, 5}; 
} 
+0

Ho alcuni casi di test che seguono il formato come testxyz(), testpqr(). La mia attuale classe di test estende TestCase. – Giridhar

+0

Non sono in esecuzione se sto seguendo questo formato. – Giridhar

+0

prima devi convertirli in JUnit 4 (semplicemente usando l'annotazione @Test, nella maggior parte dei casi) – dfa

2

Eseguo sempre un metodo di supporto che esegue il test in base ai parametri, quindi chiama tale metodo dal metodo di test JUnit. Normalmente ciò significherebbe che un singolo metodo di test di JUnit potrebbe eseguire molti test, ma non era un problema per me. Se si desideravano più metodi di test, uno per ogni invocazione distinta, si consiglia di generare la classe di test.

3

Ecco un post che ho scritto che mostra vari modi per eseguire i test più volte con esempi di codice:

Run a JUnit test repeatedly

È possibile utilizzare il corridore @Parametrized, o utilizzare il corridore speciale incluso nel post

9

recentemente ho avviato il progetto zohhak. esso consente di scrivere:

@TestWith({ 
    "25 USD, 7", 
    "38 GBP, 2", 
    "null, 0" 
}) 
public void testMethod(Money money, int anotherParameter) { 
    ... 
} 
1

Se non si vuole o non può utilizzare corridore personalizzato (es. si sta già utilizzando un altro corridore, come Robolectric corridore), si può provare questo DataSet Rule.

3

Un modo molto migliore (vi permette di avere più di un metodo di prova) è quello di utilizzare JUnit con JUnitParams:

import junitparams.Parameters; 
import org.junit.Test; 

@RunWith(JUnitParamsRunner.class) 
Public class TestClass() { 

    @Test 
    @Parameters(method = "generateTestData") 
    public void test1(int value, String text, MyObject myObject) { 
     ... Test Code ... 
    } 

    .... Other @Test methods .... 

    Object[] generateTestData() { 
     MyObject objectA1 = new MyObject(); 
     MyObject objectA2 = new MyObject(); 
     MyObject objectA3 = new MyObject(); 

     return $(
      $(400, "First test text.", objectA1), 
      $(402, "Second test text.", objectA2), 
      $(403, "Third test text.", objectA3) 
     ); 
    } 
} 

È possibile ottenere le junitparams proiettano here.

1

Se si sta già utilizzando un @RunWith nella classe di test, è probabilmente necessario dare un'occhiata a this.

+0

2018-01-19 downvote. Si prega di avere la cortesia di spiegare il tuo pensiero. Potresti imparare qualcosa. –

Problemi correlati