2017-10-12 1 views
0

J'essaie d'apprendre quelques tests unitaires pour des méthodes plus compliquées. J'ai une méthode de recherche linéaire qui recherche un tableau et retourne un autre tableau qui contient les index de la "cible" si trouvé. Comment pourrais-je écrire un test pour cette méthode? Voici la méthode ci-dessous.Tests unitaires Linéaire Méthode de recherche

public static <T extends Comparable> int[] linearSearch3 (T[] data, T 
     target) 

    int count = 0; 
    int index = 0; 
    int[] indices = new int[data.length]; 


    for (int i = 0; i < data.length;i++){ 
     if (data[i] == null) break; 
     if (data[i].compareTo(target) == 0){ 
      indices[count] = i; 
      count++; 
     } 
    } 
    Arrays.copyOf(indices, count); 
    int[] copy = Arrays.copyOf(indices,count); 

    if(count != 0){ 
    return copy; 
    } 
    else 
     return null; 

Voici ce que j'ai jusqu'à présent dans ma méthode de test. Les deux tableaux sont des champs de ma classe de test. intArray étant le tableau que je cherche. et newArray étant le tableau que je veux retourner? Cependant, je ne suis pas sûr si je vais même faire correctement. Im obtenir une erreur de types incompatibles sur la deuxième ligne. "aucune instance de type T n'existe de telle sorte que int [] est conforme à Integer où T est une variable de type".

private final Integer[] intArray = {2, 5, 6, 8, 12, 17, 3, 45, 29, 88, 76, 54, 
1, 12, 5, 41, 12, 99}; 

private final Integer[] newArray = {2}; 

    @Test 
    public <T extends Comparable> void testLinearSearch3() { 

    System.out.println("Testing LinearSearch3"); 
    Integer result = Searching.linearSearch3(intArray,(Integer)2); 

toute aide serait appréciée. Je vous remercie.

Répondre

0

Si newArray est censé contenir des indices de 2, je pense qu'il devrait être {0} au lieu de {2}

La valeur retournée serait également un int [], alors vous pouvez appeler assertEquals() à comparer le tableau retourné et newArray

int[] result = Searching.linearSearch3(intArray,(Integer)2); 
for(int i=0;i<result.length;i++){ 
    assertEquals(result[i], (int)newArray[i]); 
} 
+0

Je recommande d'ajouter une assertion de longueur avant la boucle, et feed assertEquals les deux résultats [i] et newArray [i], de sorte qu'ils peuvent utiliser l'interface Objects # égale – Igor

0

Votre méthode testLinearSearch3() ne dépend pas du paramètre de type T, de sorte que la déclaration <T extends Comparable> n'y est pas nécessaire. Vous utilisez explicitement le type Integer dans le corps de la méthode de test et le tableau, qui remplit la condition de paramètre de type sur la définition de la méthode