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

Java 比较布尔值时,JUnit Mockito在assertEquals中始终返回false,java,junit,mockito,assert,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 testIsAc

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

没有带两个布尔值的JUnit,所以您需要使用不同的方法-:

断言某个条件为真。如果不是,则抛出一个断言错误,但不带消息

但在您的情况下,您的类是模拟的,因此默认情况下,所有返回布尔值的方法都将返回false

默认情况下,对于所有返回值的方法,mock将根据需要返回null、基元/基元包装器值或空集合。例如,0表示int/Integer,false表示boolean/boolean

因此,除非您在时使用
模拟方法行为,否则您可以assertFalse它

assertFalse(accountBlocked);

你没有嘲笑任何行为。默认情况下,对模拟调用布尔方法返回false

要模拟您正在寻找的行为,请执行以下操作:

Mockito.when(userService.isAccountBlocked("username")).thenReturn(true);

我们如何使用when?@kavya来模拟方法行为,例如添加
Mockito.when(userService.isAccountBlocked(“username”)。然后返回(true)
@kavya我认为,除了其他人已经解决的“false”问题之外,阅读这些问题是很有帮助的,你似乎在嘲笑一切——包括你正在测试的对象(我想你是想测试userService)。您应该只模拟测试对象的协作者。如果您的目标是测试userService.isAccountBlocked()的逻辑,那么您需要模拟userRepository并指示它返回一些固定值,而不是模拟userService。
Mockito.when(userService.isAccountBlocked("username")).thenReturn(true);