比较布尔值时,JUnit Mockito在assertEquals中始终返回false

时间:2018-10-03 05:45:34

标签: java junit mockito assert

在比较布尔值时,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。为什么会这样?

2 个答案:

答案 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);