Vous ne savez pas comment utiliser Junit pour vérifier si un objet est valide

voix
0

Je suis en train de construire une méthode JUnit pour tester si un objet est un Spherocylinder et je suis incapable d'obtenir une couverture.

Voici les conditions que je suis en train de tester.

-état où égale méthode renvoie true

-état pour ne pas être un obj spherocylinder

-état pour l'étiquette des objets ne pas être la même

-état pour les volumes d'objets ne pas être égal

-état pour les objets cylinderheights de ne pas être égal

Voici la méthode et j'essaie de tester.

public boolean equals(Object obj) {

      if (!(obj instanceof Spherocylinder)) {
         return false;
      }
      else {
         Spherocylinder d = (Spherocylinder) obj;
         return (label.equalsIgnoreCase(d.getLabel())
               && Math.abs(radius - d.getRadius()) < 0.000001
               && Math.abs(cylinderHeight - d.getCylinderHeight())
                  < 0.000001);
      }  
}

   /**
    * hashcode method for equals method.
    * @return - return 0
    */
public int hashCode() {
      return 0;
}

Et voici ma méthode d'essai que je l'ai écrit dans Junit

 /**A test for equals() method. **/
   @Test public void equals() {
      Spherocylinder c1 = new Spherocylinder(Small Example, 0.5, 0.25);
      Spherocylinder c2 = new Spherocylinder(Different Example, 0.5, 0.25);
      Assert.assertFalse(c1.equals(c2));

      Spherocylinder d1 = new Spherocylinder(Small Example, 0.5, 0.25);
      Spherocylinder d2 = new Spherocylinder(Small Example, 0.6, 0.25);
      Assert.assertFalse(d1.equals(d2));

      Spherocylinder e1 = new Spherocylinder(Small Example, 0.5, 0.25);
      Spherocylinder e2 = new Spherocylinder(Small Example, 0.5, 0.3);
      Assert.assertFalse(e1.equals(e2));

      Spherocylinder f1 = new Spherocylinder(Small Example, 0.5, 0.25);
      Spherocylinder f2 = new Spherocylinder(Small Example, 0.5, 0.25);
      Assert.assertEquals(f1, f2);
}

Je crois avoir toutes les conditions visées à l'exception de ce qui suit

-état pour ne pas être un obj spherocylinder

Comment puis-je tester cette condition?

Créé 20/10/2018 à 03:16
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0
  1. Tout d'abord, ne pas essayer de couvrir tous les scénarios dans une seule méthode de test. Ce n'est pas une bonne façon d'écrire des méthodes d'essai avec l'intention d'obtenir une couverture de code.

Faire de nombreuses méthodes d'essai pour la méthode à tester pour tous les scénarios et selon différents types de résultats iE tests positifs et négatifs.

par exemple

@Test
public void testEquals_verifyObjectType_success(){
 // pass same type of objects 
}



@Test
    public void testEquals_verifyObjectType_failure(){
      // pass different type of objects like `String` and `Spherocylinder` 
    }

  @Test
    public void testEquals_verifylabelvalue_success(){
    }
@Test
    public void testEquals_verifylabelvalue_failure(){
    }

etc.

  1. Utiliser de manière appropriée la @Beforeméthode et ne pas créer trop d'objet

    @Before public static void setup{ testObj1 = new Spherocylinder("Small Example", 0.5, 0.25); testObj2 = new Spherocylinder("Small Example", 0.5, 0.25); stringObject = new String("TEST_VALUE"); }

stringObject , testObj1 et testObj2sont déclarés comme des champs dans votre classe Stringet Spherocylinderrespectivement.

  1. Dans vos méthodes d'essai de l'étape 1, juste avant d'appeler la méthode de test, essayez de modifier les valeurs des champs de ces objets prédéfinis en utilisant des méthodes setter et getter sur des objets selon la demande du scénario.

Et assurez-vous de restaurer ces objets à l'original après le test est exécuté et les résultats vérifiés. Qui vous réutiliser les objets et emportez une partie de la préparation des données de test de base sur la méthode d'essai (dans la mesure du possible).

Avec cette mise en place en place, vous pouvez obtenir une couverture désirée en ajoutant simplement une nouvelle méthode pour le scénario reste.

Pour cela ci-dessous,

-état pour ne pas être un obj spherocylinder

Il vous suffit d'appeler avec un type d'objet différent (comme stringObject) comme cela a déjà répondu par Dave.

Créé 20/10/2018 à 07:41
source utilisateur

voix
0

Vous pouvez essayer quelque chose comme:

@Test public void testDifferentObjectTypes() {
    Spherocylinder c1 = new Spherocylinder("Small Example", 0.5, 0.25);
    String s = "I am not a Sheprocylinder";
    Assert.assertFalse(c1.equals(s));
}
Créé 20/10/2018 à 04:07
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more