Не уверен, как использовать Junit, чтобы проверить, является ли объект действительным - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь построить метод в JUnit, чтобы проверить, является ли объект сфероцилиндром, и я не могу достичь покрытия.

Вот условия, которые я пытаюсь проверить.

-условие, где метод equals возвращает истину

-условие для obj, не являющегося сфероцилиндром

-условие для разной метки объектов

условие для разной величины объектов

условие разной высоты цилиндра объектов

Вот метод иЯ пытаюсь проверить.

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;
}

И вот мой метод испытаний, который я написал в 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);
}

Я считаю, что у меня есть все условия, за исключением следующих

- условие, чтобы объект не был сфероцилиндром

Как мне проверить это состояние?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018
  1. Прежде всего, не пытайтесь охватить все сценарии в одном методе тестирования.Это не хороший способ написания тестовых методов с намерением достичь покрытия кода.

Создание множества методов тестирования для метода, подлежащего тестированию для всех сценариев, а также в соответствии с различными типами результатов, т.е. положительным и отрицательным тестированием.

например

@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(){
    }

и т. Д. И т. Д.

Правильно используйте метод @Before и не создавайте слишком много объектов

@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 &testObj2 объявлены как поля в вашем классе как String и Spherocylinder соответственно.

В ваших тестовых методах шага # 1, перед вызовом тестового метода, попытайтесь настроить значения полей этих предопределенных объектов, используя методы setter и getter для объектов в соответствии с требованиями сценария.

И убедитесь, что эти объекты восстановлены до первоначальных после выполнения теста и проверки результатов.То есть вы повторно используете объекты и убираете часть подготовки базовых данных теста из метода тестирования (насколько это возможно).

С этой настройкой вы можете достичь желаемого покрытия, просто добавив новый метод для сценария с перебоями.

Для этого ниже,

- условие, что объект не является сфероцилиндром

Вам просто нужно вызвать объект другого типа (например, * 1041).*) как уже ответил Дэйв.

0 голосов
/ 20 октября 2018

Вы можете попробовать что-то вроде:

@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));
}
...