涵盖Java中两个分支的单元测试等于方法

时间:2019-04-05 05:52:03

标签: java unit-testing testing junit mockito

我一直试图绕过Java的单元测试equals方法来涵盖所有分支。缺少一个分支。我试图查找几个resources,但不是很有帮助。这是我要对其进行单元测试的代码。

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 个答案:

答案 0 :(得分:0)

感谢Amadan指出正确答案。我只是在这里设计响应,以便对其他人有用。为了覆盖equals方法的两个分支,我们需要提供两个不同的输入对象,一个用于equals,另一个用于不相等。例如,输入对象应如下所示:

? super TO

这样,两个分支都可以覆盖以进行单元测试。