Модульный тест, отсутствующий в ветке в Java - PullRequest
1 голос
/ 05 апреля 2019

Я пытался разобраться в модульном тестировании equals метода в Java, чтобы охватить все ветви.Отсутствует одна ветка.Я попытался найти пару ресурсов , но это не очень помогло.Вот мой код, который я пытаюсь выполнить модульным тестом.

public boolean isValid(Item item) {

    return !StringUtils.isEmpty(item.getCat()) &&        //both branches covered
            !StringUtils.isEmpty(item.getDog()) &&   //both branches covered
            !StringUtils.isEmpty(item.getDogCat()) &&       //both branches covered
            (String.format("%s|%s", item.getDog(), item.getCat())  //here one branch missing
                    .equals(item.getDogCat());
}

Модульный тест:

    boolean expectedValue = false;

    private static final Item ITEM_4 = 
      Item.builder()
            .dogCat("bow|meow")
            .dog("bow")
            .cat("meow")
            .build();


    @Test
    public void testIsValidWhenCatIsNull() {
        boolean actualValue = itemValidator.isValid(ITEM_1);
        Assert.assertEquals(expectedValue, actualValue);
    }

    @Test
    public void testIsValidWhenDogIsNull() {
        boolean actualValue = itemValidator.isValid(ITEM_2);
        Assert.assertEquals(expectedValue, actualValue);
    }

    @Test
    public void testIsValidWhenDogCatIsNull() {
        boolean actualValue = itemValidator.isValid(ITEM_3);
        Assert.assertEquals(expectedValue, actualValue);
    }

    @Test
    public void testIfDogCatMatchesConcatenatedDogCat() {
        itemValidator.isValid(ITEM_4);
        Assert.assertEquals(String.format("%s|%s" ,"bow", "meow"), ("bow|meow"));
    }

    @Test
    public void testIfDogCatDoesNotMatchesConcatenatedDogCat() {
        itemValidator.isValid(ITEM_4);
        Assert.assertNotEquals(String.format("%s|%s", "bow", "meow"), ("bow|whoop"));
}

Мир модульного тестирования для меня нов, любая помощь приветствуется.

1 Ответ

1 голос
/ 07 апреля 2019

Спасибо Амадану за то, что он указал правильный ответ.Я просто формулирую ответ здесь, чтобы он мог быть полезен для других.Чтобы покрыть обе ветви для метода equals, нам нужно предоставить два разных входных объекта, один для equals и другой, который не равен.Например, входные объекты должны выглядеть следующим образом:

private static final Item ITEM_4 = 
  Item.builder()
        .dogCat("bow|meow")
        .dog("bow")
        .cat("meow")
        .build();

private static final Item ITEM_5 = 
  Item.builder()
        .dogCat("bow|meow")
        .dog("bow")
        .cat("whoop")
        .build();

    @Test
    public void testIfDogCatMatchesConcatenatedDogCat() {
        boolean actualValue = itemValidator.isValid(ITEM_4);
        Assert.assertTrue(actualValue);
    }

    @Test
    public void testIfDogCatDoesNotMatchesConcatenatedDogCat() {
        boolean actualValue = itemValidator.isValid(ITEM_5);
        Assert.assertFalse(actualValue);
    }

Таким образом, обе ветви могут быть покрыты для модульного тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...