2013-10-16 2 views
1

Les tests doivent avoir une bonne couverture des types d'exceptions et d'erreurs que cette classe peut générer, et ils doivent avoir une bonne couverture des instructions défectueuses dans la méthode constructeur pour CalculatePrimesMother.Couverture maximale de JUnit Cas de test

La méthode pour laquelle trois cas de test Junit nécessaire est comme ci-dessous:

public CalculatePrimesMother(int numWorkers, int queueLength, int maxPrime, 
      boolean verbose) { 

     this.numWorkers = numWorkers; 

     // Instantiate 3 queues, for thread-safe communication with workers 
     Candidate = new ArrayBlockingQueue<Integer>(queueLength); 
     Prime = new ArrayBlockingQueue<Integer>(queueLength); 
     Composite = new ArrayBlockingQueue<Integer>(queueLength); 

     this.maxPrime = maxPrime; 
     this.sqrtMaxPrime = (int) Math.sqrt(maxPrime); 
     primeFactors = new int[sqrtMaxPrime]; 
     this.verbose = verbose; 
    } 

J'ai essayé et créé un certain cas de test, mais pas en mesure d'obtenir une couverture complète quelqu'un peut me aider?

public class CalculatePrimesMotherTest extends TestCase { 

    public CalculatePrimesMotherTest(String name) { 
     super(name); 
    } 

    private CalculatePrimesMother testMother; 

    @Test 
    public final void testCalculatePrimesMotherNegativequeueLength() { 
     try { 
      testMother = new CalculatePrimesMother(4, -12, 908, false); 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 

    } 

    @Test 
    public final void testCalculatePrimesMotherMinusOne() { 
     try { 
      testMother = new CalculatePrimesMother(8, 12, 0, true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+0

Vous n'avez pas de branches dans votre constructeur, donc appeler simplement une nouvelle fois CalculatePrimesMother vous donnerait une couverture complète de la méthode constructeur. Quel outil utilisez-vous pour calculer la couverture? Quelles sont les lignes qui ne sont pas couvertes par cet outil? –

+1

Si vous n'obtenez pas une couverture complète, cela doit être dû au fait qu'une exception est levée et que vous l'attrapez dans le test. C'est quelque chose que vous ne devriez pas faire. L'idée est de laisser jUnit capturer toutes les exceptions lancées dans votre code afin qu'il puisse détecter si le test a échoué ou non. – luanjot

Répondre

1

Quelle couverture obtenez-vous? Il n'y a pas de tests si dans votre ctor, donc un seul appel devrait exercer tout le code que je vois.

Vous écrivez trop de code. Les méthodes setUp et tearDown et le constructeur de test sont tous inutiles. Retirez-les.

Vous n'avez pas besoin des blocs try/catch dans les autres tests. Enlevez ceux-ci aussi. Vous voulez qu'une exception déclenche un échec de test. Attraper va cacher l'erreur.

+0

Je veux vérifier tous les scénarios possibles pour cette méthode. donc toute erreur possible ou condition d'exception devrait être là. – user2886707

+0

Vous l'avez fait. Je ne vois aucune exception vérifiée étant levée. Qu'est-ce qui vous fait penser que vous n'avez pas 100% de couverture? Y a-t-il un outil qui vous donne une mesure, ou simplement vous imaginez qu'il vous manque quelque chose? – duffymo

+1

@ user2886707 Ce n'est pas ce que vous faites. Vous dites à jUnit que s'il y a une exception, il devrait la négliger! Si vous voulez prendre en compte toutes les exceptions possibles, vous devez utiliser l'annotation "attendue". Vérifiez cela http://www.vogella.com/articles/JUnit/article.html – luanjot