我一直试图绕过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"));
}
对于我来说,单元测试世界是一个陌生的世界,任何帮助都值得赞赏。
答案 0 :(得分:0)
感谢Amadan指出正确答案。我只是在这里设计响应,以便对其他人有用。为了覆盖equals方法的两个分支,我们需要提供两个不同的输入对象,一个用于equals,另一个用于不相等。例如,输入对象应如下所示:
? super TO
这样,两个分支都可以覆盖以进行单元测试。