2012-02-09 4 views
3

Il y a une belle possibilité d'exécuter test JUnit avec des paramètres où la même méthode d'essai est exécuté plusieurs fois avec des données différentes, comme décrit ici: http://junit.org/apidocs/org/junit/runners/Parameterized.htmlTests JUnit paramétrés avec paramètres non primitifs?

Malheureusement, il semble possible d'utiliser des paramètres primitifs ou des chaînes, mais pas des objets . Y a-t-il une solution de contournement connue pour cela?

+0

Avez-vous savoir une solution à ce problème? –

Répondre

7

Le type de la méthode data() dans l'utilisation de l'annotation @Parameters est List<Object[]>, vous pouvez donc placer n'importe quel objet.

Pour passer, par exemple, un objet Money, votre tableau à convertir en une liste serait:

{{new argent (26, "CHF")}, {new argent (12 , "USD")}}

Le constructeur de la classe de test devrait alors prendre un objet Money comme argument.

0

récemment commencé i zohhak projet. il vous permet d'écrire:

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

En utilisant l'objet est également possible JUnit @Parameters.

Exemple: -

@RunWith(Parameterized.class) 
public class TestParameter { 

@Parameter(value=0) 
public int expected; 

@Parameter(value=1) 
public int first; 

@Parameter(value=2) 
public int second; 
private Calculator myCalculator; 


@Parameters(name = "Test : {index} : add({1}+{2})= Expecting {0}")//name will be shared among all tests 
public static Collection addNumbers() { 
    return Arrays.asList(new Integer[][] { { 3, 2, 1 }, { 5, 2, 3 }, { 9, 8, 1 }, { 200, 50, 150 } }); 
} 
@Test 
public void testAddWithParameters() { 
    myCalculator = new Calculator(); 
    System.out.println(first + " & " + second + " Expected = " + expected); 
    assertEquals(expected, myCalculator.Add(first, second)); 
} 

}

Questions connexes