Existe-t-il un moyen de dire à JUnit d'exécuter plusieurs fois un scénario de test spécifique avec différentes données avant de passer au scénario de test suivant?
jetez un oeil à junit 4.4 théories :
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};
}
Il semble que ce soit un candidat parfait pour les tests paramétrés.
Mais, fondamentalement, les tests paramétrés vous permettent d'exécuter le même ensemble de tests sur différentes données.
Voici quelques bons articles de blog à ce sujet:
Récemment, j'ai commencé le projet zohhak . Il vous permet d'écrire:
@TestWith({
"25 USD, 7",
"38 GBP, 2",
"null, 0"
})
public void testMethod(Money money, int anotherParameter) {
...
}
Une bien meilleure façon (vous permet d'avoir plus d'une méthode de test) est d'utiliser JUnit avec 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)
);
}
}
Vous pouvez obtenir le projet junitparams ici .
Voici un article que j'ai écrit qui montre plusieurs façons d'exécuter les tests à plusieurs reprises avec des exemples de code:
Exécutez un test JUnit à plusieurs reprises
Vous pouvez utiliser le coureur @Parametrized, ou utiliser le coureur spécial inclus dans le message
Je crée toujours une méthode d'assistance qui exécute le test en fonction des paramètres, puis j'appelle cette méthode à partir de la méthode de test JUnit. Normalement, cela signifierait qu'une seule méthode de test JUnit exécuterait en fait beaucoup de tests, mais ce n'était pas un problème pour moi. Si vous vouliez plusieurs méthodes de test, une pour chaque appel distinct, je recommanderais de générer la classe de test.
Si vous utilisez déjà un @RunWith
dans votre classe de test, vous devrez probablement jeter un œil à this .
Si vous ne voulez pas ou ne pouvez pas utiliser de coureur personnalisé (par exemple, vous utilisez déjà un autre coureur, comme le coureur Robolectric), vous pouvez essayer ceci DataSet Rule .