在比较布尔值时,JUnit Mockito在assertEquals中始终返回false。
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@Mock
private UserService userService;
@Mock
private UserRepository userRepository;
@Test
public void testIsAccountBlocked() {
Boolean accountBlocked = userService.isAccountBlocked("username");
assertEquals(true, accountBlocked);
}
}
即使用户名被阻止,此方法也始终返回false。为什么会这样?
答案 0 :(得分:2)
没有2个布尔值的JUnit assertEquals,因此您需要使用其他方法-assertTrue:
断言条件为真。如果不是,则会抛出AssertionError而不显示消息。
assertTrue(accountBlocked);
但是在您的情况下,您的类是模拟的,因此默认情况下,其所有带有布尔返回值的方法都将返回false
默认情况下,对于所有返回值的方法,模拟将酌情返回null,原始/原始包装器值或空集合。例如,对于int / Integer为0,对于boolean / Boolean为false。
因此,除非您使用when
模拟方法行为,否则您可以断言它
assertFalse(accountBlocked);
答案 1 :(得分:0)
您没有嘲笑任何行为。默认情况下,在模拟对象上调用布尔方法会返回false。
要模拟您正在寻找的行为:
Mockito.when(userService.isAccountBlocked("username")).thenReturn(true);